c# - 为什么通过 OleDb 在 Access 数据库中调用我的更新查询不起作用?

标签 c# sql ms-access oledb

更新 2:我解决了这个问题,请看我的回答。


我正在使用 OleDb 从 C# 调用 Microsoft Access 数据库中的查询,但我无法使我的更新查询工作。

不会抛出任何错误,但更新不会保存在数据库中。

任何人都可以阐明这一点吗?


数据库中的SQL查询:

UPDATE tableName SET tableName.LastPolledDtg = LastPolledDtg
WHERE tableName.key = ID;

C#:

OleDbCommand command = new OleDbCommand();
SetCommandType(command, CommandType.StoredProcedure, "NameOfQueryInAccessDatabase");
AddParamToSQLCmd(command, "@ID", OleDbType.Integer, 4, ParameterDirection.Input, id);
AddParamToSQLCmd(command, "@LastPolledDtg", OleDbType.Date, 4, ParameterDirection.Input, DateTime.Now);
using (OleDbConnection connection = new OleDbConnection("connectionString"))
{
command.Connection = connection;
connection.Open();
result = command.ExecuteNonQuery();
}

连接字符串:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\Administrator\\Desktop\\dev\\src\\Website\\App_Data\\tracking.mdb"

更新 1:

我试图通过创建一个包含单个表和单个查询的新数据库并确保在运行 C# 更新表时关闭 Access 来缩小可能性。

更新仍未执行。我怀疑这是一个语法问题(也可能是权限问题?),但如果没有任何错误消息,它很难调试!

最佳答案

刚刚解决了问题 - 这是参数的命名问题 - 似乎您不能将查询中的参数命名为与任何字段相同的名称。

更改查询自:

UPDATE tableName SET tableName.LastPolledDtg = LastPolledDtg
WHERE tableName.key = ID;

到:

UPDATE tableName SET tableName.LastPolledDtg = LastPolledDtgArg
WHERE tableName.key = ID; 

...并使用参数名称更改更新调用 C# 使其写入数据库。

但是,还有另外一个小问题:在 C# 中保留参数排序,导致数据库中的 LastPolledDtg 字段更新为最小日期(1899 年或其他日期)。重新排序将参数添加到 OleDbCommand 以匹配它们在 SQL 中的出现修复了此问题。

所以 C# 应该是这样的:

OleDbCommand command = new OleDbCommand();
SetCommandType(command, CommandType.StoredProcedure, "NameOfQueryInAccessDatabase");
AddParamToSQLCmd(command, "@LastPolledDtgArg", OleDbType.Date, 4, ParameterDirection.Input, DateTime.Now);
AddParamToSQLCmd(command, "@ID", OleDbType.Integer, 4, ParameterDirection.Input, id);
using (OleDbConnection connection = new OleDbConnection("connectionString"))
{
command.Connection = connection;
connection.Open();
result = command.ExecuteNonQuery();
}

我爱 Access 的人。

关于c# - 为什么通过 OleDb 在 Access 数据库中调用我的更新查询不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/645063/

相关文章:

c# - MySQL 格式化问题的 RDLC 报告

c# - Google Freebase Api C# .Net 示例

sql - 使用用户输入的日期从表单更新表格

vba - 针对 MS Access 2003 执行动态 SQL 查询

ms-access - 如何在 VBA 中使用 VB 打印机对象

c# - 如何使用 LinqToExcel 获取没有标题的单元格值

C# UWP 通用 Windows 应用程序 - 调整形状大小

c# - 从数据库中获取两个日期之间的所有记录 C#

sql - 如何在 DB2 过程中将整数值与字符串连接起来

mysql - 非常慢的查询,还有其他方法可以以更好的性能对其进行格式化吗?