首頁 > 資料庫 > mysql教程 > 為什麼 My SQL 預存程序會拋出'過程或函數 '...' 需要參數 '@參數名稱',但未提供”錯誤?

為什麼 My SQL 預存程序會拋出'過程或函數 '...' 需要參數 '@參數名稱',但未提供”錯誤?

Barbara Streisand
發布: 2025-01-06 16:50:40
原創
311 人瀏覽過

Why Does My SQL Stored Procedure Throw a

預存程序或函數需要據稱提供的參數

呼叫預存程序將資料插入 SQL Server資料庫時,您可能會遇到錯誤“過程或函數'預存程序名稱'需要參數'@參數名稱',但未提供該參數。”此錯誤訊息可能會令人困惑,特別是如果您已驗證預存程序具有正確的參數並且它們在您的程式碼中提供的話。

錯誤故障排除

要解決此問題,請徹底檢查以下內容:

  • 驗證參數名稱和資料類型: 確保程式碼中的參數名稱和資料類型與預存程序中定義的完全相符。使用相同的大小寫並避免任何拼字錯誤。
  • 檢查命令類型: 將命令類型指定為 StoredProcedure 以明確指示您正在呼叫預存程序。省略此設定可能會導致正在執行的命令不明確。
  • 停用預設值:如果為預存程序中的參數定義了預設值,則必須在程式碼中明確指定它們,即使您不想提供自訂值。
  • 參數順序:程式碼中參數的順序必須與預存程序中定義的順序相符。如果參數遺失或順序混亂,則會發生錯誤。

範例程式碼更新

以下是程式碼的更新版本,其中明確指定了指令類型和參數值:

public void SHOWuser(string userName, string password, string emailAddress, List<int> preferences)
{
    using var dbcon = new SqlConnection(conn);
    using var cmd = new SqlCommand();

    cmd.Connection = dbcon;
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.CommandText = "SHOWuser";

    cmd.Parameters.AddWithValue("@userName", userName);
    cmd.Parameters.AddWithValue("@password", password);
    cmd.Parameters.AddWithValue("@emailAddress", emailAddress);

    dbcon.Open();
    int i = Convert.ToInt32(cmd.ExecuteScalar());

    cmd.Parameters.Clear();
    cmd.CommandText = "tbl_pref";

    foreach (int preference in preferences)
    {
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(i));
        cmd.Parameters.AddWithValue("@preferenceID", Convert.ToInt32(preference));

        cmd.ExecuteNonQuery();
    }
}
登入後複製

透過仔細檢查參數名稱、資料類型、命令類型和參數排序,您可以減輕此錯誤並成功執行您的預存程序。

以上是為什麼 My SQL 預存程序會拋出'過程或函數 '...' 需要參數 '@參數名稱',但未提供”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板