1

我正在尝试使用 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 个小时来找出问题所在,但无法调试它。

4

2 回答 2

0

您应该始终使用参数化查询,我也没有在您的代码中看到您打开连接的位置

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
于 2012-08-20T15:38:40.570 回答
0
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'

如果所有这些步骤都令人满意并且您仍然卡住:

  1. 仔细检查连接字符串是否真正指向您认为的同一数据库。
  2. 绕过您的代码并直接在底层数据库中执行 UPDATE 命令并检查是否允许。
于 2012-08-20T16:03:46.790 回答