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

问题描述 投票:0回答:3

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

vb.net ms-access
3个回答
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

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 命令并检查是否允许。

0
投票

首先你必须遵循 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
作为第一个参数传递。否则你会得到错误。

© www.soinside.com 2019 - 2024. All rights reserved.