参数化查询期望提供未提供的参数。
参数化查询期望提供未提供的参数。
我在我的代码中遇到了一个问题:\n
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()
\n一旦我在文本框中输入字符串来搜索一个项目,我就会得到这个错误:\n
\n参数化查询“(@Parameter1 nvarchar(4000))SELECT * FROM\n borrow where (Departme\' 需要参数“@Parameter1”,但未提供。\n
\n有人可以帮我吗?
在开发过程中,有时候我们会遇到一个名为"The parameterized query expects the parameter which was not supplied"的错误。这个错误出现的原因是因为在使用参数化查询时,没有正确提供所有必需的参数。
解决这个问题的方法是确保为所有的参数提供了正确的值。上述代码中提供了两种解决方案,分别是使用VB.NET和C#编写的。
在VB.NET中,可以使用以下代码来解决这个问题:
cmd.Parameters.AddWithValue("", IF(TextBox2.Text, DBNull.Value))
这段代码的作用是,如果TextBox2的文本值不为空,则将其作为参数的值传递给查询语句;如果TextBox2的文本值为空,则将DBNull.Value作为参数的值传递给查询语句。
在C#中,可以使用以下代码来解决这个问题:
cmd.Parameters.AddWithValue("", (object)TextBox2.Text ?? DBNull.Value)
这段代码的作用是,将TextBox2的文本值转换为object类型,并使用??运算符来判断其是否为空。如果TextBox2的文本值不为空,则将其作为参数的值传递给查询语句;如果TextBox2的文本值为空,则将DBNull.Value作为参数的值传递给查询语句。
通过以上的解决方法,我们可以避免"The parameterized query expects the parameter which was not supplied"错误的出现,并正确地使用参数化查询。
文章标题:(The parameterized query expects the parameter which was not supplied)问题的原因和解决方法
近期,您的网站正面临被黑客攻击的严重危险。请阅读关于SQL注入和如何在.NET中预防SQL注入的相关资料。目前您的查询问题并不是最令人担忧的事情,但是......
对于您的问题,'的解决方法接近但还不够完善。请将您的查询更改为以下内容:
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%%')"
并且按照下面的方式(或者按照 的方式)添加参数:
cmd.Parameters.AddWithValue("",TextBox2.Text)
重要的区别在于您需要更改CommandText。
您好,我已经更改了代码,但是仍然遇到错误。代码如下:
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%%') cmd.Parameters.Add("", SqlDbType.VarChar) cmd.Parameters.AddWithValue("", TextBox2.Text) 错误信息:"The parameterized query '( nvarchar(4000), varchar(8000),' expects the parameter '', which was not supplied."
我怀疑您的错误是由其他地方引发的。能否提供您的堆栈跟踪信息?
您的回答忽略了'%' + + '%'
的意图。
在执行参数化查询时,如果传递了一个空值给参数,即使在添加了参数后也会出现(The parameterized query expects the parameter which was not supplied)这个错误。因此,我们需要检查参数的值,如果为null,则使用DBNull.Value来代替。以下是解决该问题的方法:
cmd.Parameters.Add("", SqlDbType.VarChar) if (TextBox2.Text == null) cmd.Parameters("").Value = DBNull.Value else cmd.Parameters("").Value = TextBox2.Text
以上代码将从对象层转换为数据库可接受的DBNull值,以解决空值的问题。另外,可以使用以下简写方式进行转换:
cmd.Parameters("").Value = (object)TextBox2.Text ?? DBNull.Value;
这种简写方式使用了空值合并运算符,将TextBox2.Text转换为对象,如果为null,则使用DBNull.Value代替。这种方法也适用于我。.Add方法已被弃用,可以使用cmd.Parameters.AddWithValue方法来添加参数:
cmd.Parameters.AddWithValue("", (object)TextBox2.Text ?? DBNull.Value);
需要注意的是,.Add(String, Object)方法已经被弃用,而.Add(String, SqlDbType)方法则没有。因此,上述方法或后续的评论中并没有使用到已弃用的方法。根据文档的说明,我们应该使用DBNull.Value来表示一个null值。