调用SQL Server存储过程sp_Lab_InsertBiologicalPersonnel缺少@IcNumber参数怎么解决
问题原因
你遇到的报错核心原因90%都是参数值为C# null导致SQL Server认为你没传参数:
- 你的存储过程要求必须传入
@IcNumber参数,C#代码里虽然写了加这个参数,但如果request.IcNumber的值是C#的null(比如BiologicalPersonelInsert类里的IcNumber是可空的int?类型,前端请求没传这个值,或者你赋值的时候漏了),SqlParameter默认不会把C#的null转换成SQL Server能识别的NULL,而是直接判定这个参数未提供,就会抛出你看到的报错。 - 小概率排查点:确认你的存储过程是最新部署到数据库的,没有旧版本的参数定义不一致的问题。
解决方法
对所有可能为null的参数做兼容处理,把C#的null替换成SQL Server能识别的DBNull.Value即可:
- 修改
@IcNumber参数的赋值代码,做空值兼容处理:
command.Parameters.Add(new SqlParameter() { Value = request.IcNumber ?? (object)DBNull.Value, ParameterName = "@IcNumber" });
- 其他可能为null的参数也建议做同样处理,比如字符串类型的
@Position:
command.Parameters.Add(new SqlParameter() { Value = request.Position ?? (object)DBNull.Value, ParameterName = "@Position" });
你可以先在加参数的代码行打个断点,运行的时候看request.IcNumber的实际值,大概率确实是null,改完就可以正常运行了。
内容的提问来源于stack exchange,提问作者Mr Haikal
相关产品推荐
相关产品推荐

