【发布时间】:2015-04-24 10:48:59
【问题描述】:
在我的程序中,我有一个名为 runSQL 的函数,它是:
Dim Connection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TrainingLog.accdb")
Dim DT As New DataTable
Dim DataAdapter As OleDb.OleDbDataAdapter
Connection.Open()
DataAdapter = New OleDb.OleDbDataAdapter(query, Connection)
DT.Clear()
DataAdapter.Fill(DT)
Connection.Close()
Return DT
我正在尝试使用来自以下代码的更新字符串更新数据库中的记录:
Dim sqlString As String
sqlString = "UPDATE UserRecords set FirstName = '" & txtName.Text
sqlString = sqlString & "', LastName = '" & txtSurname.Text
If ChkSmoker.Checked = True Then
sqlString = sqlString & "', Smoker = true"
ElseIf ChkSmoker.Checked = False Then
sqlString = sqlString & "', Smoker = false"
End If
sqlString = sqlString & ", Weight = " & txtWeight.Text
If RdoMale.Checked = True Then
sqlString = sqlString & ", Gender = 'm'"
ElseIf RdoFemale.Checked = True Then
sqlString = sqlString & ", Gender = 'f'"
End If
sqlString = sqlString & " WHERE UserName = '" & LstUsers.SelectedItem.ToString & "'"
runSQL(sqlString)
但是,一旦我单击保存按钮,我会从 runSQL 函数的第 7 行收到一个错误(不包括空行,所以这是 DataAdapter.Fill(DT) 行),上面写着“没有为所需的一个或多个提供值参数。”
我想知道是否有人知道这是为什么或如何解决它。
我确实想到的一件事是,在正在更新的表中,除了我的 UPDATE 语句中提到的字段之外,还有其他字段。例如,有一个名为“TeamMember”的是/否字段,我在更新声明中没有提及。 使用更新功能时,我是否必须为每个字段指定值,即使是那些没有被更改的字段?
感谢阅读,希望对您有所帮助!
【问题讨论】:
-
老实说我不知道。我只是在学校学习 Visual Basic,我被告知要使用 SQL 部分,而不是教他们。
-
您是否真正查看过所有代码生成的 SQL 语句?这是要做的第一件事,看看它是否是你所期望的。如果您看过,请告诉我们您看到了什么。
-
UPDATE UserRecords set FirstName = 'Dave', LastName = 'Smith', Smoker = false, Weight = 55, Gender = 'm' WHERE UserName = 'Dave1'
-
runSQL 函数看起来像是用于选择行并放置在数据表中的东西。您正在运行的 sql 是更新而不是选择。该命令将仅返回受影响的行数,而不是可以插入数据表的数据行。
-
我的老师为我们提供了帮助表 PDF,这就是他说要使用的方法,这与将用户添加到数据库时相同,我目前在物理领域不计算但我会在电脑上再次检查代码
标签: sql vb.net ms-access sqlparameter sql-parametrized-query