简介:
参数化查询通过允许参数与查询字符串分开指定。但是,如果未提供必需的参数,则可能会导致错误“参数化查询需要未提供的参数。”
场景:
考虑以下代码片段来自 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中文网其他相关文章!