ホームページ > データベース > mysql チュートリアル > パラメータ化されたクエリで「パラメータがありません」エラーがスローされるのはなぜですか?

パラメータ化されたクエリで「パラメータがありません」エラーがスローされるのはなぜですか?

Patricia Arquette
リリース: 2024-12-31 04:19:08
オリジナル
150 人が閲覧しました

Why Does My Parameterized Query Throw a

パラメータ化されたクエリ エラー: パラメータがありません

概要:

パラメータ化されたクエリでは、パラメータを次のように設定できるため、セキュリティとパフォーマンスが向上します。クエリ文字列とは別に指定します。ただし、必須パラメータが指定されていない場合、「パラメータ化されたクエリは、指定されていないパラメータを期待しています。」というエラーが発生する可能性があります。

シナリオ:

検討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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート