我尝试使用以下脚本更新MS Access数据库中的值。
我已经验证生成的查询是有效的,如果我在MS Access中输入它,它可以正常工作。
此外,我验证了oledbcommand.executeNonQuery()返回应修改的正确行数。
最后,据我所知,我没有收到任何错误。
但是,当我运行代码后检查数据库时,没有任何更改。有没有人知道为什么会这样?
我有其他函数从数据库中检索使用oledbcommand正常工作的数据。但是我无法修改数据库。
请注意,我不知道此脚本不能防止注入,但这超出了本问题的范围。我只是想学习如何更新数据库。
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';
答案 0 :(得分:0)
当代码执行此UPDATE
时,您不会收到任何错误,cmdUpdate.ExecuteNonQuery()
会按预期返回1。
UPDATE [Rooms]
SET [Rooms].[Main Space Category] = '5'
WHERE [Rooms].[Number] = '100';
然而,您报告db实际上并未更新。进一步调查这一点。从执行SELECT
时使用的相同OleDB连接对象中尝试此UPDATE
。
SELECT [Rooms].[Main Space Category]
FROM [Rooms]
WHERE [Rooms].[Number] = '100';
要进行额外测量,请仔细检查连接对象的ConnectionString
属性中的数据源。
Console.WriteLine(connection.ConnectionString)