问题描述
c#调用存储过程如下:stringstrcon;strcon=Code.Configuration.CONNECTIONSTRING;conn=newSqlConnection(strcon);conn.Open();SqlCommandcmd=newSqlCommand("sp_creatMonthKCReport",conn);cmd.CommandType=CommandType.StoredProcedure;SqlParametersp_1=newSqlParameter("@ny",SqlDbType.VarChar,7);sp_1.Value="2008-06";cmd.Parameters.Add(sp_1);cmd.ExecuteNonQuery();conn.Close();该存储过程在查询分析器执行结果如下(正确):idvalue01aaa02bbb03ccc在页面调用后结果如下(错误):idvalue01aaa02aaa03aaa怀疑是“c#调用存储过程”的代码有错误,但是将参数直接写进存储过程后,还是不对。
解决方案
解决方案二:
Showthesp"sp_creatMonthKCReport"....
解决方案三:
引用楼主user54的帖子:
怀疑是“c#调用存储过程”的代码有错误,但是将参数直接写进存储过程后,还是不对。
什么意思?是不是存储过程里sql的问题
解决方案四:
该存储过程在查询分析器执行结果完全正确出错的代码段:--本月结存DECLAREcurrMonthStore_cursorCURSORFORselectx.itembh,(casewhenx.buyTotalNumsisnullthen0-y.sellTotalNumselsex.buyTotalNums-y.sellTotalNumsend)ascurrMonthStorefrom(selecta.itembh,b.buyTotalNums,b.buyTotalMoneyfromtmp_kctj1aleftjoin(selectitembh,sum(innum)asbuyTotalNums,sum(inprice)asbuyTotalMoneyfromdict_kcjh_itemwhere'20'+substring(incode,3,2)+'-'+substring(incode,5,2)<=@currYearMonthgroupbyitembh)bon(a.itembh=b.itembh))xleftjoin(selecta.itembh,b.sellTotalNums,b.sellTotalMoneyfromtmp_kctj1aleftjoin(selecty_a.clsbh,y_a.itembh,sum(y_a.num)assellTotalNums,sum(y_a.subtotal)assellTotalMoneyfromBuz_ScheduleDetaily_aleftjoinBuz_ScheduleCardy_bony_a.bh=y_b.bhwhereconvert(char(7),y_b.ChargeDate,120)<=@currYearMonthgroupbyy_a.clsbh,y_a.itembh)bon(a.itembh=b.itembh))yonx.itembh=y.itembhOPENcurrMonthStore_cursorFETCHNEXTFROMcurrMonthStore_cursorINTO@sp_buyItembh,@currMonthStore--Check@@FETCH_STATUStoseeifthereareanymorerowstofetch.WHILE@@FETCH_STATUS=0BEGIN--PRINT@sp_buyItembh--PRINT'售价'+@sp_buyUnitPriceupdatetmp_kctj1setcurrMonthStore=@currMonthStorewhereitembh=@sp_buyItembh--Thisisexecutedaslongasthepreviousfetchsucceeds.FETCHNEXTFROMcurrMonthStore_cursorINTO@sp_buyItembh,@currMonthStoreENDCLOSEcurrMonthStore_cursorDEALLOCATEcurrMonthStore_cursor--------------------------------------下面这段也是该存储过程的内容,但是没有出错。--将本月采购信息更新至统计临时统计表DECLAREbuy_cursorCURSORFORselecta.itembh,b.buyTotalNums,b.buyunitpricefromtmp_kctj1aleftjoin(selectitembh,'20'+substring(incode,3,2)+'-'+substring(incode,5,2)asny,sum(innum)asbuyTotalNums,--sum(inprice)asbuyTotalMoney,(casewhen(sum(innum)isnullorsum(innum)=0)then''elsesum(innum*inunitprice)/sum(innum)end)asbuyunitpricefromdict_kcjh_itemgroupby'20'+substring(incode,3,2)+'-'+substring(incode,5,2),itembh)bon(a.ny=b.nyanda.itembh=b.itembh)OPENbuy_cursorFETCHNEXTFROMbuy_cursorINTO@sp_buyItembh,@currMonthTotalBuyNums,@sp_buyUnitPrice--Check@@FETCH_STATUStoseeifthereareanymorerowstofetch.WHILE@@FETCH_STATUS=0BEGIN--PRINT@sp_buyItembh--PRINT'售价'+@sp_buyUnitPriceupdatetmp_kctj1setcurrMonthBuyNums=@currMonthTotalBuyNums,buyunitprice=@sp_buyUnitPricewhereitembh=@sp_buyItembhandny=@currYearMonth--Thisisexecutedaslongasthepreviousfetchsucceeds.FETCHNEXTFROMbuy_cursorINTO@sp_buyItembh,@currMonthTotalBuyNums,@sp_buyUnitPriceENDCLOSEbuy_cursorDEALLOCATEbuy_cursor
解决方案五:
如果参数传对了,C#执行存储过程跟查询分析器里执行结果是完全一样的.
解决方案六:
我把参数固定的写在了存储过程,结果还是那样。没招了。
解决方案七:
会不会是权限原因?
解决方案八:
SqlParametersp_1=newSqlParameter("@ny",SqlDbType.VarChar,7);SqlDbType.VarChar换成SqlDbType.NvarChar试试看
解决方案九:
该存储过程在查询分析器执行结果如下(正确):idvalue01aaa02bbb03ccc在页面调用后结果如下(错误):idvalue01aaa02aaa03aaa你查询分析器里的参数值与页面里的不一样吧,不然怎么会这样
解决方案十:
我的程序也遇到和你类似的问题了,我在查询分析器下执行得到的结果完全正确,但是在C#下就不行,好象是数据类型的问题,大哥你要是解决了把原因给说说噢,谢谢了