概要:
パラメータ化されたクエリでは、パラメータを次のように設定できるため、セキュリティとパフォーマンスが向上します。クエリ文字列とは別に指定します。ただし、必須パラメータが指定されていない場合、「パラメータ化されたクエリは、指定されていないパラメータを期待しています。」というエラーが発生する可能性があります。
シナリオ:
検討Visual Basic .NET の次のコード スニペットアプリケーション:
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()
問題:
テキストボックスに検索文字列を入力すると、コードにより次のエラーが発生します:
The parameterized query '(@Parameter1 nvarchar(4000))SELECT * FROM borrow where (Departme' expects the parameter '@Parameter1', which was not supplied.
解決策:
このエラーは、パラメーターが存在しないために発生します。クエリ文字列で指定されます。これを解決するには、@Department などのパラメータを追加し、ユーザー入力に基づいてその値を指定します。
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
このコードは、テキスト ボックスが空かどうかを確認し、空であればパラメータ値を DBNull.Value に設定します。 。それ以外の場合、パラメータ値はテキスト ボックスに入力されたテキストに設定されます。
パラメータを指定すると、クエリは正常に実行され、フィルタリングされたデータが返されます。
以上がパラメータ化されたクエリで「パラメータがありません」エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。