解决办法: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);

至此问题已解决

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页