参数化查询期望提供未提供的参数。

20 浏览
0 Comments

参数化查询期望提供未提供的参数。

我在我的代码中遇到了一个问题:\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有人可以帮我吗?

0
0 Comments

在开发过程中,有时候我们会遇到一个名为"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"错误的出现,并正确地使用参数化查询。

0
0 Comments

文章标题:(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."

我怀疑您的错误是由其他地方引发的。能否提供您的堆栈跟踪信息?

您的回答忽略了'%' + + '%'的意图。

0
0 Comments

在执行参数化查询时,如果传递了一个空值给参数,即使在添加了参数后也会出现(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值。

0