[英]How to Handle SQL Exception Must Pass Parameter number 'x'?
我正在嘗試通過使用存儲過程來存儲二進制數據。 存儲過程具有三個參數。 最后一個參數將包含二進制數據。 但是,當我運行代碼時,它會給出SQL異常
必須傳遞參數編號3和后續參數作為“ @name = value”。 使用'@name = value'形式后,所有后續參數都必須以'@name = value'形式傳遞。
SqlCommand cmd = new SqlCommand("EXEC myProc @param1 = 8, @param2= '5.png', @FileSignature");
using (SqlConnection conn = new SqlConnection(myConnString))
{
cmd.Connection = conn;
if (FileSignature == null) //FileSignature is byte[]
{
cmd.Parameters.Add("@FileSignature", SqlDbType.VarBinary, -1);
cmd.Parameters["@FileSignature"].Value = System.DBNull.Value;
}
else
cmd.Parameters.AddWithValue("@FileSignature", FileSignature); //FileSignature is byte[]
int iReturn = cmd.ExecuteNonQuery();
}
因為您按名稱提供了前兩個參數,所以必須為所有這三個參數都提供。 因此,您需要更新SqlCommand文本以使其包含SqlCommand cmd = new SqlCommand("EXEC myProc @param1 = 8, @param2= '5.png', **@Parameter3** = @FileSignature");
將@ Parameter3替換為Stored Proc中的名稱,也可以使用可選的名稱(只要參數在過程中的順序相同)就不能傳遞任何名稱。
SqlCommand cmd = new SqlCommand("EXEC myProc 8, '5.png', @FileSignature");
您不能將@param=val
用於某些參數,將@param
用於其他參數。 另外,這也不是使用sqlCommand
執行存儲過程的正確方法。
請嘗試閱讀異常消息。 這是簡單的英語,可以為您提供幫助。
嘗試這個:
using(SqlConnection conn = new SqlConnection(myConnString),
SqlCommand cmd = new SqlCommand("myProc", conn)
{
cmd.CommandType = SqlCommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", 8);
cmd.Parameters.AddWithValue("@param2", '5.png');
if (FileSignature == null) //FileSignature is byte[]
{
cmd.Parameters.Add("@FileSignature", SqlDbType.VarBinary, -1);
cmd.Parameters["@FileSignature"].Value = System.DBNull.Value;
}
else
{
cmd.Parameters.AddWithValue("@FileSignature", FileSignature); //FileSignature is byte[]
}
conn.Open();
int iReturn = cmd.ExecuteNonQuery();
conn.Close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.