C# MS Access oledbcommand.executeNonQuery UPDATE 没有错误,没有变化

标签 c# sql ms-access oledbcommand

我正在尝试使用以下脚本更新 MS Access 数据库中的值。

我已经验证生成的查询是有效的,并且如果我在 MS Access 中输入它,它就可以工作。

我还验证了 oledbcommand.executeNonQuery() 返回了应该修改的正确行数。

最后,据我所知,我没有收到任何错误。

但是,当我在运行代码后检查数据库时,没有任何变化。有没有人知道为什么会这样?

我还有其他函数可以使用 oledbcommand 从数据库中检索数据,这些数据可以正常工作。但是我不能让它修改数据库。

请注意,我知道这个脚本不能防止注入(inject),但这超出了这个问题的范围。我只是想学习如何更新数据库。

void IDatabase.UpdateRecordValue(string table, string updateColumn, string updateValue, string lookUpColumn, string lookUpValue)
{
       connection.Open();
       OleDbCommand cmdUpdate = new OleDbCommand();

       string sqlQuery = "UPDATE [" + table + "] " +
                         "SET [" + table + "].[" + updateColumn + "] = '" + updateValue + "' " +
                         "WHERE [" + table + "].[" + lookUpColumn + "] = '" + lookUpValue + "';";

       cmdUpdate.CommandText = sqlQuery;
       cmdUpdate.CommandType = CommandType.Text;
       cmdUpdate.Connection = connection;

       cmdUpdate.ExecuteNonQuery();
       connection.Close();
}

编辑:我的连接字符串如下,数据库没有密码:"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};"

编辑这是我尝试使用的实际查询示例

UPDATE [Rooms] 
SET [Rooms].[Main Space Category] = '5'
WHERE [Rooms].[Number] = '100';

最佳答案

当您的代码执行此 UPDATE 时,您不会收到任何错误,并且 cmdUpdate.ExecuteNonQuery() 会按预期返回 1。

UPDATE [Rooms] 
SET [Rooms].[Main Space Category] = '5'
WHERE [Rooms].[Number] = '100';

但您报告数据库实际上并未更新。进一步调查这一点。从执行 UPDATE 时使用的同一个 OleDB 连接对象尝试此 SELECT

SELECT [Rooms].[Main Space Category]
FROM [Rooms]
WHERE [Rooms].[Number] = '100';

对于额外的措施,请仔细检查连接对象的 ConnectionString 属性中的数据源。

Console.WriteLine(connection.ConnectionString)

关于C# MS Access oledbcommand.executeNonQuery UPDATE 没有错误,没有变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514823/

相关文章:

c# - DataGridView 数据绑定(bind)到 List<List<T>>

c# - 获取日期范围内的扣除结果

mysql - 从 ID 匹配的两个表中选择全部

sql - LAG 有效,LEAD 在同一语句中返回 1

ms-access - 如何使用列表框值来更新文本框

c# - 如何通过C#解析markdown

c# - SQLite 日期和时间数据类型

sql - Oracle 查询排序

sql - 子类型数据库表

ms-access - 如何在 VBA ADO Execute 中获取受影响的行?