解决办法: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);
1
按照上述代码修改后发现有编译错误:

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

问题原因:
字符串和 DBNull 之间不能自动进行转换

解决办法
可以有如下的代码进行转换:

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

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

SqlParameter paraXxxx = new SqlParameter("@Xxxx", regRequest.Xxxx ?? (object)DBNull.Value);
1
至此问题已解决
————————————————
版权声明:本文为CSDN博主「bluetata」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dietime1943/article/details/104635575

posted @ 2022-04-08 09:41  vba是最好的语言  阅读(70)  评论(0编辑  收藏  举报