我正在尝试使用 update 更新数据库,但由于某种原因数据库没有更新 我使用了以下查询:
Dim dc As OleDbCommand
dc = New OleDbCommand("UPDATE tempM1 SET [input] = '" & ans_selected & "' WHERE question = '" & question & "'", cn)
dc.ExecuteNonQuery()
我正在使用另外 1 个更新查询,并且工作正常:
dc = New OleDbCommand("UPDATE tempTof SET [input] = '" & optionSelected & "' WHERE question = '" & question & "'", cn)
dc.ExecuteNonQuery()
请帮忙...我浪费了近 2 个小时来找出问题所在,但无法调试它。
您应该始终使用参数化查询,而且我在代码中也没有看到打开连接的位置
Dim cn As OleDbConnection
Using(cn = GetConnection())
cn.Open();
Dim dc As OleDbCommand
dc = New OleDbCommand("UPDATE tempM1 SET [input] = ? WHERE question = ?", cn)
dc.Parameters.AddWithValue("@ans", ans_selected)
dc.Parameters.AddWithValue("@question", question)
dc.ExecuteNonQuery()
End Using
Dim dc As OleDbCommand
dc = New OleDbCommand("UPDATE tempM1 SET [input] = '" & ans_selected & "' WHERE question = '" & question & "'", cn)
在此处放置一些内容来检查 dc.CommandText,例如:
Console.WriteLine dc.CommandText
dc.ExecuteNonQuery()
dc.CommandText 真的包含您期望的内容吗?
如果是这样,它会说类似
UPDATE tempM1 SET [input]='foo' WHERE question='bar'
然后通过直接访问数据库并检查用 UPDATE 替换 SELECT 是否返回至少一行来进行双重检查:
SELECT * FROM tempM1 WHERE question='bar'
如果所有这些步骤都令人满意,但您仍然陷入困境:
首先你必须遵循 SQL 查询的过程。 例如:
Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\UCC\Desktop\database.mdb") ' Access Database
Dim cmd As New OleDbCommand
cmd.Connection = conn
cmd.CommandText = "update student set sname=@sname, scity=@scity where ID=@ID"
cmd.Parameters.AddWithValue("@sname", TextBox2.Text) ' Name
cmd.Parameters.AddWithValue("@scity", TextBox3.Text) ' City Text
cmd.Parameters.AddWithValue("@ID", TextBox1.Text) ' ID text
conn.Open() ' opening connection
cmd.ExecuteNonQuery() ' executing non Query
conn.Close() ' Closing the connection
在上面的代码中,如果您的查询将
sname
作为第一个,scity
作为第二个,ID
作为第三个。然后你必须通过以下结构传递参数。如果 sname
是第一个,那么您必须将 @sname
作为第一个参数传递。否则你会得到错误。