错误:来自 ASP.NET 的 UPDATE 查询中的“没有为一个或多个必需参数提供值”

Posted

技术标签:

【中文标题】错误:来自 ASP.NET 的 UPDATE 查询中的“没有为一个或多个必需参数提供值”【英文标题】:Error: "No value given for one or more required parameters" on UPDATE query from ASP.NET 【发布时间】:2014-01-28 19:05:01 【问题描述】:

我收到错误消息

没有为一个或多个必需参数指定值

当我尝试执行以下代码时

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim t2 = TextBox2.Text

    Dim dbcmd As OleDbCommand
    dbcmd = New OleDbCommand("UPDATE login1 SET height ='" + TextBox2.Text + "' WHERE username =" + str, dbcon) //This is the part where the error is ....
    dbcon.Open()
    dbcmd.ExecuteNonQuery()
    dbcon.Close()

    End Sub
End Class

我尝试在此语句中进行更改,例如使用带有参数的不同方法...但所有代码都显示相同的错误。

【问题讨论】:

我敢打赌,问题在于您使用的输入中有一个参数占位符字符。因此,您面临的问题是您的代码对 SQL 注入完全开放。您需要使用 SQL 参数将用户输入视为 数据 而不是将 is 视为 可执行代码 【参考方案1】:

使用参数化查询绝对是要走的路,但在这种情况下不建议使用命名参数,因为OleDbCommand对象忽略@时的参数名称987654323@ 是Text。它们仅依赖于参数在CommandText 中出现的顺序(参考:here)。

因此,首选方法是

Using dbcmd As New OleDbCommand(
            "UPDATE login1 SET height=? WHERE username=?",
            dbcon)
    dbcmd.Parameters.AddWithValue("?", TextBox2.Text)  ' height
    dbcmd.Parameters.AddWithValue("?", str)  ' username
    dbcmd.ExecuteNonQuery()
End Using

【讨论】:

【参考方案2】:

您没有在查询末尾正确提供用户名。但这不是这里唯一的问题。让我稍微修改一下代码:

Using dbcon As New OleDbConnection(cString)
    dbcon.Open()

    Using dbcmd As New OleDbCommand(
        "UPDATE login1 SET height = @height WHERE username = @username",
        dbcon)
        dbcmd.Parameters.AddWithValue("@height", TextBox2.Text)
        dbcmd.Parameters.AddWithValue("@username", str)

        dbcmd.ExecuteNonQuery()
    End Using
End Using

注意:using 语句确保对象是 disposed 属性,并且,不要共享连接。当您需要连接、构建、打开、使用和处置。

【讨论】:

虽然不是完全错误,但在这种情况下不鼓励使用 named 参数,因为 ACE.OLEDB 实际上会忽略名称,而仅依赖于 order参数。首选SET height=? WHERE username=? @GordThompson,非常有趣的一点和一个很好的补充 - 非常感谢!

以上是关于错误:来自 ASP.NET 的 UPDATE 查询中的“没有为一个或多个必需参数提供值”的主要内容,如果未能解决你的问题,请参考以下文章

来自 UPDATE 查询的“SQL 命令未正确结束”错误 [重复]

如果参数名称等于属性名称,则来自查询的 ASP.NET Core Web API 复杂类型绑定不起作用

Asp.net 客户端验证错误消息不断显示来自 jquery 的值更改

Thingsboard - REST API 上的身份验证错误(来自 Curl 命令和 ASP.NET)

来自 Javascript AJAX 的 ASP.NET MVC 操作调用收到 500 内部服务器错误

ASP.Net Core 1 日志记录错误 - 找不到来自源应用程序的事件 ID xxxx 的描述