【发布时间】: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