Rumah >pangkalan data >tutorial mysql >Mengapa Prosedur Disimpan SQL Saya Melemparkan Ralat 'Prosedur atau fungsi '...' menjangkakan parameter '@nama parameter', yang tidak dibekalkan'?

Mengapa Prosedur Disimpan SQL Saya Melemparkan Ralat 'Prosedur atau fungsi '...' menjangkakan parameter '@nama parameter', yang tidak dibekalkan'?

Barbara Streisand
Barbara Streisandasal
2025-01-06 16:50:40315semak imbas

Why Does My SQL Stored Procedure Throw a

Prosedur atau Fungsi Tersimpan Menjangka Parameter Yang Kononnya Dibekalkan

Apabila memanggil prosedur tersimpan untuk memasukkan data ke dalam pangkalan data SQL Server, anda mungkin menghadapi ralat "Prosedur atau fungsi ' nama prosedur tersimpan ' menjangka parameter '@nama parameter', yang tidak dibekalkan." Mesej ralat ini boleh membingungkan, terutamanya jika anda telah mengesahkan bahawa prosedur yang disimpan mempunyai parameter yang betul dan ia dibekalkan dalam kod anda.

Menyelesaikan Masalah Ralat

Untuk menyelesaikan isu ini, semak perkara berikut dengan teliti:

  • Sahkan Parameter Nama dan Jenis Data: Pastikan nama parameter dan jenis data dalam kod anda betul-betul sepadan dengan yang ditakrifkan dalam prosedur tersimpan. Gunakan selongsong yang sama dan elakkan sebarang kesilapan menaip.
  • Semak Jenis Perintah: Tentukan jenis arahan sebagai StoredProcedure untuk menunjukkan secara jelas bahawa anda sedang memanggil prosedur tersimpan. Meninggalkan tetapan ini boleh membawa kepada kesamaran tentang perintah yang sedang dilaksanakan.
  • Lumpuhkan Nilai Lalai: Jika nilai lalai ditakrifkan untuk parameter dalam prosedur yang disimpan, ia mesti dinyatakan secara eksplisit dalam kod anda, walaupun anda tidak mahu memberikan nilai tersuai.
  • Parameter Pesanan: Susunan parameter dalam kod anda mesti sepadan dengan susunan yang ditakrifkan dalam prosedur tersimpan. Jika parameter tiada atau tidak teratur, ralat akan berlaku.

Kemas Kini Kod Contoh

Berikut ialah versi kemas kini kod anda yang menyatakan secara jelas jenis arahan dan nilai parameter:

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();
    }
}

Dengan memeriksa dengan teliti nama parameter, jenis data, jenis arahan dan pesanan parameter, anda boleh mengurangkan ralat ini dan berjaya melaksanakan prosedur tersimpan anda.

Atas ialah kandungan terperinci Mengapa Prosedur Disimpan SQL Saya Melemparkan Ralat 'Prosedur atau fungsi '...' menjangkakan parameter '@nama parameter', yang tidak dibekalkan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn