关于System.Data.IDbCommand的ExecuteNonQuery,执行存储过程的output变量需要传入与传出时遇到的问题,暂无解...

简单的说,就是:parameter为output,同时要传入值,但在command的ExecteNonQuery时,这个传入值自己变了。很坑!!!


public static int SqlExecuteNon(Database database, string sql, System.Data.CommandType commandType, params object[] parameters) { int execi = 0; using (System.Data.IDbCommand command = database.Connection.CreateCommand()) { try { database.Connection.Open(); command.CommandText = sql; command.CommandType = commandType; command.CommandTimeout = command.Connection.ConnectionTimeout; if (parameters != null) foreach (var param in parameters) { //位置1 command.Parameters.Add(param); } //位置2 execi = command.ExecuteNonQuery(); } catch (Exception ex) { } finally { database.Connection.Close(); command.Parameters.Clear(); } } return execi; }

  位置1,添加了一个parameter,是output的,同时给它传值10,执行到位置1时,看到command.Parameters确实添加了这个parameter

,但执行了位置2下面的,execi = command.ExecuteNonQuery();   后,跟踪到sql看到 执行的

而我,command.ExecteNonQuery,执行PPPPP1 这个存储过程时,,

第一次跟踪到的sql执行的是,

declare @p2 bigint
set @p2=1
exec PPPPP1 @name=N'name1',@par2=@p2 output
select @p2

第一次跟踪到的sql执行的是,
declare @p2 bigint
set @p2=2
exec PPPPP1 @name=N'name1',@par2=@p2 output
select @p2

第一次跟踪到的sql执行的是,
declare @p2 bigint
set @p2=3
exec PPPPP1 @name=N'name1',@par2=@p2 output
select @p2


它的@p2的值,和我传入的parameter的value不一样,@p2的值,似乎是我要进行查询的一个表的行数,(因为我删了那个表的行,它又重新计数,即@p2=1,或@p2=2)

  

转载于:https://www.cnblogs.com/ijunxiong/articles/7418558.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值