我的資料庫中有一個存盤程序:
ALTER PROCEDURE [dbo].[SP_UPDATE_PARAMS]
(@ELEMENT NUMERIC (10),
@NUM_PARAM_OP_DINT NUMERIC (3,0) OUTPUT,
@NUM_PARAM_OP_REAL NUMERIC (3,0) OUTPUT,
@NUM_PARAM_LL NUMERIC (3,0) OUTPUT,
.... other 500 output params
該程序根據@Element值是什么為每個值生成一個輸出。否則回傳值 0。
所以,在我的 C# 代碼中,我嘗試使用它:
....
using (SqlConnection connection = new SqlConnection(connectString))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand("[dbo].[SP_UPDATE_PARAMS]", connection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ELEMENT", SqlDbType.Int).Value = element;
SqlDataReader rdr = cmd.ExecuteReader();
.....
但我收到此錯誤:
存盤程序或函式 [dbo].[SP_UPDATE_PARAMS] 需要未提供的引數@NUM_PARAM_OP_DINT
如果我沒有為 504 個值中的每一個提供值[dbo].[SP_UPDATE_PARAMS](即使它們是輸出),就會發生這種情況
我嘗試使用
foreach (IDataParameter param in cmd.Parameters)
{
param.Value = DBNull.Value;
}
和
foreach (SqlParameter parameter in cmd.Parameters)
{
parameter.Value = DBNull.Value;
}
打電話之前
SqlDataReader rdr = cmd.ExecuteReader();
但他們都不會做,因為cmd.Parameters在(我猜)cmd.ExecuteReader()被執行之前都是空的。
我怎樣才能避免必須為所有引數提供一個值,或者讓所有引數都為空?
uj5u.com熱心網友回復:
cmd.Parameters 屬性為空,您可以為要執行的程序向其添加引數。
https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.parameters?view=dotnet-plat-ext-6.0#property-value
您可以使用默認值為該存盤程序的引數創建一個帶有引數陣列的物件,并將該物件作為引數傳入。您仍然可以通過這種方式設定 @ELEMENT 值。
https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlparametercollection.addrange?view=dotnet-plat-ext-6.0
另一個潛在的解決方案,使您存盤的 proc OUTPUT 引數可選
ALTER PROCEDURE [dbo].[SP_UPDATE_PARAMS](@ELEMENT NUMERIC (10),
@NUM_PARAM_OP_DINT NUMERIC (3,0) = NULL OUTPUT,
@NUM_PARAM_OP_REAL NUMERIC (3,0) = NULL OUTPUT,
@NUM_PARAM_LL NUMERIC (3,0) = NULL OUTPUT,
uj5u.com熱心網友回復:
如果您將空引數傳遞給 proc,則需要將引數宣告NULL為
@ELEMENT NUMERIC (10) = NULL,
@NUM_PARAM_OP_DINT NUMERIC (3,0) = NULL,
@NUM_PARAM_OP_REAL NUMERIC (3,0) = NULL,
@NUM_PARAM_LL NUMERIC (3,0) = NULL,
您仍然需要向 proc 提供引數,但取決于您實際想要的引數是 null pass a DBNull.Value
編輯:不要AddWithValue用于上帝的愛。只是使用Add
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/360552.html
標籤:C# 。网 sql-server sql命令
上一篇:有沒有一種LINQ方法可以根據數量將2個行專案變成N個?
下一篇:配置服務時訪問配置物件
