私のコードに問題があります:
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()
テキストボックスに文字列を入力してアイテムを検索すると、次のエラーが表示されます。
パラメーター化されたクエリ '(@ Parameter1 nvarchar(4000))SELECT * FROMborrow where(Departme'はパラメーター '@ Parameter1'が必要ですが、指定されていません。
誰も私を助けることができますか?
Null値をパラメーターに渡すと、パラメーターを追加した後でもこのエラーが発生するため、値を確認し、nullの場合はDBNull.Valueを使用してください。
これは動作します
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
これにより、オブジェクトレイヤーのNULL値が、データベースで受け入れ可能なDBNull値に変換されます。
あなたのウェブサイトはハッキングされる深刻な危険にさらされています。
クエリの問題は、現時点で最も懸念事項ではありません。
しかし.....
@Misnomerの解決策は近いですが、そこにはありません:
クエリをこれに変更します。
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%@DepartmentText%')"
この方法(または@Misnomerが行う方法)でパラメーターを追加します。
cmd.Parameters.AddWithValue("@DepartmentText",TextBox2.Text)
重要な違いは、CommandTextを変更する必要があることです。
Ravidevの構築と簡素化 answer :
VB.NETの略記は
cmd.Parameters.AddWithValue("@Department", IF(TextBox2.Text, DBNull.Value))
C#の短縮形は
cmd.Parameters.AddWithValue("@Department", TextBox2.Text ?? DBNull.Value)
parameters を追加してみてください-
cmd.Parameters.Add("@Department", SqlDbType.VarChar)
cmd.Parameters("@Department").Value = TextBox2.Text
そして、コマンドテキストを@Abe Miesslerが正しいとするテキストに変更します。
DataGridViewコントロールからデータベースに書き込む場合は、空の行がないことを確認してください。 「ユーザーによる行の追加を許可」をfalseに設定します。不要な最後の空の行を切り捨てます。