更新查询不在Vb.NET中工作

时间:2012-08-20 15:16:32

标签: vb.net ms-access

我正在尝试使用更新来更新数据库但由于某种原因数据库没有得到更新 我使用了以下查询:

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个小时搞清楚什么是错的,但无法调试它。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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. 仔细检查connectionstring是否真正指向您认为的相同数据库。
  2. 绕过代码并直接在底层数据库中自行执行UPDATE命令,并检查是否允许这样做。