【问题标题】:Oledb No Value Given for one or more required parameters VB.NETOledb 没有为一个或多个必需参数给出值 VB.NET
【发布时间】:2022-01-08 04:18:57
【问题描述】:

谁能告诉我我的代码有什么问题?我在这里完全是新手,这是我很长一段时间以来第一次尝试写东西,

下面的代码应该更新访问数据库中的两个字段

Private Sub TestButton_Click(sender As Object, e As EventArgs) Handles TestButton.Click
    'connects application to database
    Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DatabasePath\database.accdb"
    Dim SqlString As String = "update SaintStaff set [StaffHours]=[@CAHours],[RecordedTime]=[@Time] where [StaffName] = " & Label2.Text & ""

    'updates record in  SaintStaff table.
    Using conn As New OleDbConnection(ConnString)
        conn.Open()
        Using cmd As New OleDbCommand(SqlString, conn)
            cmd.CommandType = CommandType.Text
            cmd.Parameters.AddWithValue("[@CAHours]", Label6.Text)
            cmd.Parameters.AddWithValue("[@Time]", Label10.Text)
            cmd.ExecuteNonQuery()
        End Using
        conn.Close()
    End Using
End Sub

我收到以下错误 System.Data.OleDb.OleDbException: '没有为一个或多个必需参数提供值。'

它突出显示每行上的 cmd 文本,我不知道我做错了什么,有人可以帮忙吗?

谢谢

【问题讨论】:

  • 不要在参数名称周围加上方括号。也不要连接查询字符串,因为这会打开您的应用程序进行 sql 注入攻击。这就是参数的用途。
  • 如果您进行字符串连接,附加一个空字符串没有任何区别。但是您必须在 SQL 字符串周围加上单引号:"update ... where [StaffName] = '" & Label2.Text & "'"。但是最好引入第三个参数(这次不带引号):"update ... where StaffName = @StaffName"
  • Thankyou @MatSnow 将 cmd 参数更改为 cmd.Parameters.Add("@CAHours", OleDbType.VarChar).Value = Label6.Text 修复了部分问题
  • 感谢 @OlivierJacot-Descombes 对 StaffName 变量的建议

标签: vb.net visual-studio


【解决方案1】:

这个问题由 cmets 中的 MatSnow 和 olivier-jacot-descombes 回答,正确的代码如下所示

Private Sub TestButton_Click(sender As Object, e As EventArgs) Handles TestButton.Click
    'connects application to database
    Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DatabasePath\Database.accdb"
    Dim SqlString As String = "update SaintStaff set StaffHours = @CAHours, RecordedTime = @Time where StaffName = @staffname "

    'updates record in  SaintStaff table.
    Using conn As New OleDbConnection(ConnString)
        conn.Open()
        Using cmd As New OleDbCommand(SqlString, conn)
            cmd.CommandType = CommandType.Text
            cmd.Parameters.Add("@CAHours", OleDbType.VarChar).Value = Label6.Text
            cmd.Parameters.Add("@Time", OleDbType.VarChar).Value = Label10.Text
            cmd.Parameters.Add("@Staffname", OleDbType.VarChar).Value = Label2.Text
            cmd.ExecuteNonQuery()
        End Using
        conn.Close()
    End Using
End Sub

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多