c# mysql executescalar为什么返回值是空,c# – 当我的返回值不为null时,为什么ExecuteScalar()返回null?...

本文探讨了如何在C#中正确处理SQL Server存储过程,特别是当过程返回bigint并使用Output参数时,遇到返回值始终为null的问题。作者提供了存储过程代码和解决方法,重点在于设置SqlCommand的ExecutionMode和Output参数的读取方式。

尝试将SQL过程的结果分配给C#中的变量

我有一个具有输入和输出参数的过程.

输入inPara的参数采用int

outPara的输出参数返回bigint

当我测试该过程时,输出参数和返回值都不会读取null. (因为我让它返回out参数.)

这意味着程序不是问题,但我的C#中有一些东西.

我的连接字符串和所有正常工作.

代码如下:

SqlCommand c = new SqlCommand();

c.CommandText = "ProcedureName";

c.CommandType = CommandType.StoredProcedure;

c.Connection = con; //this works, prev defined

// Something below is the problem:

c.Parameters.Add(new SqlParameter("@inPara", 3));

SqlParameter outer = new SqlParameter("@outPara", SqlDbType.BigInt);

outer.Direction = ParameterDirection.Output;

c.Parameters.Add(outer);

object o = c.ExecuteScalar();

if (o != null) int i = (int) o;

但是o总是会变为null,即使它不应该.我错过了什么吗?

根据评论中的建议,我正在显示我的SQL服务器存储过程:

CREATE PROCEDURE MyStoredProcedure (@inPara int, @outPara bigint out )

AS

BEGIN

set @inPara = (Select A.ID from myTable A

INNER JOIN

(SELECT ROW_NUMBER() OVER(ORDER BY HT_ID DESC) AS 'RN', *

FROM myTable) B ON A.ID= B.ID

AND B.RN = outPara)

return @outPara

END

GO

连接的结果是一个包含5行且没有空值的表.

当outPara介于1和5之间时,它会返回@outpara的值

解决方法:

问题在于您返回数据的方式.如果你想使用ExecuteScalar,你不应该返回,而只是简单地选择.

如果您无法更改SP,但代码,解决方案是使用ExecuteNonQuery()读取参数’@outPara’.

将SqlCommand对象的UpdatedRowSource属性分配给UpdateRowSource.OutputParameters,以指示将通过输出参数从此存储过程返回数据.

command1.UpdatedRowSource = UpdateRowSource.OutputParameters;

command1.ExecuteNonQuery();

读取值为command1.Parameters [“@ outPara”].值;

标签:c,sql,sql-server,stored-procedures,null

来源: https://codeday.me/bug/20190623/1272271.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值