解决办法: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);至此問題已解決
總結
以上是生活随笔為你收集整理的解决办法:Call stored procedure using ExecuteSqlCommand (expects parameters which was not supplied)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keras保存历史准确率与loss值
- 下一篇: 关于MPU6050学习的一些总结之三MP