Pengenalan:
Pertanyaan berparameter menyediakan keselamatan dan prestasi yang lebih baik dengan membenarkan parameter menjadi ditentukan secara berasingan daripada rentetan pertanyaan. Walau bagaimanapun, jika parameter yang diperlukan tidak dibekalkan, ia boleh mengakibatkan ralat "Pertanyaan berparameter menjangkakan parameter yang tidak dibekalkan."
Senario:
Pertimbangkan coretan kod berikut daripada Visual Basic .NET aplikasi:
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged list.Items.Clear() cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%" & TextBox2.Text & "%')" cmd.Connection = con cmd.CommandType = CommandType.Text con.Open() rd = cmd.ExecuteReader() If rd.HasRows = True Then While rd.Read() Dim listview As New ListViewItem listview.Text = rd("ID").ToString listview.SubItems.Add(rd("Department").ToString) listview.SubItems.Add(rd("Purpose").ToString) listview.SubItems.Add(rd("Items_Details").ToString) listview.SubItems.Add(rd("Requested_by").ToString) listview.SubItems.Add(rd("Approved_by").ToString) listview.SubItems.Add(rd("Date").ToString) listview.SubItems.Add(rd("Status").ToString) listview.SubItems.Add(rd("Date_Returned").ToString) list.Items.Add(listview) End While End If con.Close()
Isu:
Setelah memasukkan rentetan carian dalam kotak teks, kod tersebut menimbulkan ralat berikut:
The parameterized query '(@Parameter1 nvarchar(4000))SELECT * FROM borrow where (Departme' expects the parameter '@Parameter1', which was not supplied.
Penyelesaian:
Ralat ini berlaku kerana tiada parameter dinyatakan dalam rentetan pertanyaan. Untuk menyelesaikan masalah ini, tambahkan parameter seperti @Department dan tentukan nilainya berdasarkan input pengguna:
cmd.Parameters.Add("@Department", SqlDbType.VarChar) If (TextBox2.Text = Nothing) Then cmd.Parameters("@Department").Value = DBNull.Value Else cmd.Parameters("@Department").Value = TextBox2.Text End If
Kod ini menyemak sama ada kotak teks kosong dan menetapkan nilai parameter kepada DBNull.Value jika ia adalah . Jika tidak, ia menetapkan nilai parameter kepada teks yang dimasukkan dalam kotak teks.
Dengan membekalkan parameter, pertanyaan akan berjaya dilaksanakan dan mengembalikan data yang ditapis.
Atas ialah kandungan terperinci Mengapa Pertanyaan Berparameter Saya Membuang Ralat 'Parameter Hilang'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!