更新查询在Vb.NET中不起作用

更新查询在Vb.NET中不起作用,vb.net,ms-access,Vb.net,Ms Access,我正在尝试使用update更新数据库,但由于某些原因,数据库未得到更新 我使用了以下查询: Dim dc As OleDbCommand dc = New OleDbCommand("UPDATE tempM1 SET [input] = '" & ans_selected & "' WHERE question = '" & question & "'", cn) dc.ExecuteNonQuery() 我正在使用1个更新查询,其工作正常: dc = New

我正在尝试使用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
在此处输入一些内容以检查dc.CommandText,例如: dc.CommandText是否真的包含您希望它包含的内容

如果是的话,上面写着

UPDATE tempM1 SET [input]='foo' WHERE question='bar'
然后,通过直接访问数据库并检查用更新替换SELECT是否至少返回一行来进行双重检查:

SELECT * FROM tempM1 WHERE question='bar'
如果所有这些步骤都令人满意,但您仍然被卡住:

  • 仔细检查connectionstring是否真的指向您认为它是的同一个数据库
  • 绕过代码,直接在底层数据库中执行UPDATE命令,并检查是否允许

  • 检查
    question
    的值,确保它与表中的实际行相对应。我尝试用数据库中的实际值替换question的值,但仍然存在一些问题。执行查询,但未在表中插入所选ans_的值,而是将row的值更新为NONE。这是两个不同的表。第一个是tempM1,第二个是emptof。您是否确定有一个值被指定给ANSU selected?实际上,我已经在begining中打开了连接,但忘了在代码中显示它。。。我尝试了你建议的方法,Steve,但是数据库中[input]列的值并没有被ans_selected更新,而是[input]列的值为None。你的列[input]和问题是文本类型吗?我想是的,因为你们用单引号括起来了。问题解决了。。。实际上,我在函数中声明了ans_select,它采用默认值,我将其声明为全局变量,问题得到了解决!!反正是thanx。
    dc.ExecuteNonQuery()
    
    UPDATE tempM1 SET [input]='foo' WHERE question='bar'
    
    SELECT * FROM tempM1 WHERE question='bar'