c#执行sql存储过程,出了怪事。专家指教 在线等

问题描述

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#下就不行,好象是数据类型的问题,大哥你要是解决了把原因给说说噢,谢谢了

时间: 2024-09-15 12:54:49

c#执行sql存储过程,出了怪事。专家指教 在线等的相关文章

在ASP.NET中用存储过程执行SQL语句

  存储过程:是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程.by google 存储过程执行效率比单独的SQL语句效率高. 样编写存储过程?存储过程在SQL Server 2005对应数据库的可编程性目录下. 比如,创建一个存储过程 create procedure procNewsSelectNewNews as begi

sql-java 执行SQL Server 存储过程

问题描述 java 执行SQL Server 存储过程 存储过程 有 2个输入参数 为 int nvarchar 类型 1个输出参数 nvarchar类型 -- String orderNo=""""; // 返回值 con=BaseDao.getConn(); //获取连接 CallableStatement cstmt=null; try { cstmt=con.prepareCall(""{?=call proc_createOrder(?

单独执行很快-SQL存储过程比SQL语句慢,甚至卡死

问题描述 SQL存储过程比SQL语句慢,甚至卡死 因公司业务需要,需要每天凌晨从别的系统(Oracle数据库)取前一天的数据,建了存储过程后,发现执行存储过程经常卡死,单独执行却挺快,不知道是哪里出了问题,求大神帮忙分析下,万分感谢!以下为存储过程代码: USE [HERP_BHYY] GO /****** 对象: StoredProcedure [dbo].[sp_GetHISChargeOReceiptDataInHISDBbyDay] 脚本日期: 12/03/2013 08:36:35 *

如何在启动SQL SERVER时自动执行一个存储过程

    本文解答如何在启动SQL SERVER的时候,执行一个存储过程的问题. 如何在启动SQL SERVER的时候,执行一个存储过程? 将存储过程创建在master数据库中,然后企业管理器中找到这个存储过程--右键--属性--勾选"每当sql server启动时执行". 或者在master中创建存储过程后,执行语句设置为自动启动 use masterexec sp_procoption '存储过程名','startup','on' 自动执行存储过程 SQL Server 启动时可以自

oarcle 存储过程-存储过程执行报错,请专家指教

问题描述 存储过程执行报错,请专家指教 create or replace procedure get_accu_info_proc(p_id pm_accu_t.accu_id%type) as v_name pm_accu_t.accu_name%type; begin select accu_name into v_name from pm_accu_t where accu_id = p_id; dbms_output.put_line(v_name); end get_accu_inf

远程执行SQL或远程调用存储过程

  --远程连接 if ( not exists(select * from sys.servers where name='remotedb')) begin EXEC sp_addlinkedserver @server='remotedb',--被访问的服务器别名 @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.0.153' --要访问的服务器 end EXEC sp_addlinkedsrvlogin --登录映射 'rem

sql 存储过程执行过程中的奇怪问题

问题描述 sql 存储过程执行过程中的奇怪问题 某个存储过程,大概如下 b=0,c=0,d=0 如果 a=1 执行下面的 b=b+2;c=c+3;d=d+4 否则 b=b-2;c=c-3;d=d-4 当第一次赋值a=1的时候,存储过程只执行了 b=b+2;d=d+4:而c=c+3;这个语句无执行,所以这个时候c还是0 接着执行a!=0的时候,存储过程执行 b=b-2;c=c-3;d=d-4.所以这个时候c=-3 再执行a=1,存储过程执行 b=b+2;c=c+3;d=d+4.所以这个时候c=0

在ASP.NET中用存储过程执行SQL语句_实用技巧

存储过程执行效率比单独的SQL语句效率高. 样编写存储过程?存储过程在SQL Server 2005对应数据库的可编程性目录下. 比如,创建一个存储过程 复制代码 代码如下: create procedure procNewsSelectNewNews as begin select top 10 n.id,n.title,n.createTime,c.name from news n inner join category c on n.caId=c.id order by n.createT

SQL存储过程在.NET数据库中的应用

存储过程|数据|数据库 一.前言: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程.总的来说,存储过程具有以下一些优点: ◆存储过程允许标准组件式编程 ◆存储过程能够实现较快的执行速度 ◆存储过程能够减少网络流量 ◆存储过程可被作为一种安全机制来充分利用 本文作者将向大家介绍.NET