解決辦法: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);

至此問題已解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章