簡體   English   中英

如何處理必須通過參數編號“ x”的SQL異常?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM