解决办法:Call stored procedure using ExecuteSqlCommand (expects parameters which was not supplied)

问题描述

在做.NET Core demo的时候使用 ExecuteSqlCommand 调用执行是出现如下错误

Microsoft.Data.SqlClient.SqlException (0x80131904): The parameterized query ‘(xxx’ expects the parameter ‘@xxx’, which was not supplied.

原因分析

之前在使用EF的时候完全没有问题,后改用调用sp后出现问题,又排查了sql语句以及参数都没有发现错误,后来在Postman发现测试数据这个值是null值,后赋值给这个字段再次跑postman发现可以跑过。分析是因为直接赋值null给sp的过程中出错,但是该字段并不是必填项,可以有空的时候,后调查使用 DBNull.Value 来解决

解决办法

在SqlParameter赋值的时候使用 DBNull.Value 来做一次判断:

SqlParameter paraXxxx = new SqlParameter("@Xxxx", regRequest.Xxxx ?? DBNull.Value);

按照上述代码修改后发现有编译错误:

CS0019 Operator ‘??’ cannot be applied to operands of type ‘string’ and ‘DBNull’

问题原因:

字符串和 DBNull 之间不能自动进行转换

解决办法

可以有如下的代码进行转换:

SqlParameter paraXxxx = new SqlParameter("@Xxxx", (object)regRequest.Xxxx ?? DBNull.Value);

SqlParameter paraXxxx = new SqlParameter("@Xxxx", regRequest.Xxxx ?? Convert.DBNull);

或者

SqlParameter paraXxxx = new SqlParameter("@Xxxx", regRequest.Xxxx ?? (object)DBNull.Value);

至此问题已解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bluetata

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值