我有一个 ASP.NET 页面,需要将一些数据推送到 MS Access 2003 数据库。该过程需要对一条记录进行选择,插入一条新记录并更新一条记录。我正在通过连接连接到 Access 数据库OleDbConnection
。到目前为止,Select 和 Insert 功能完全按预期工作(所以我知道我的连接良好)。但是,更新无法更新任何行。更新记录的函数如下所示:
public static int UpdateDeviceDates(int deviceId, DateTime nextTestDate)
{
var conn = DbConnect.AccessConnection();
var sqlString = WebConfigurationManager.AppSettings["UpdateDeviceDates"];
using (var cmd = new OleDbCommand(sqlString, conn))
{
cmd.Parameters.AddWithValue("@DeviceID", deviceId);
cmd.Parameters.AddWithValue("@NextTestDate", nextTestDate);
cmd.CommandType = CommandType.Text;
conn.Open();
var result = cmd.ExecuteNonQuery();
return result;
}
}
从 web.config 文件中拉回的 sqlString 如下所示:
UPDATE tblDevice
SET tblDevice.NextTestDate = @nextTestDate,
tblDevice.FirstNoticeDate = Null,
tblDevice.SecondNoticeDate = Null
WHERE DeviceID=@deviceId;
如果您将其粘贴到新的 Access 查询窗口并点击运行,则此查询可以正常工作,因此我知道语法是正确的。我做了很多测试,@nextTestDate
发现是导致它失败的领域。当我从 SQL 字符串中取出它时,它按预期更新了记录。这令人不安,因为我传递给插入函数的日期工作得很好。
我环顾四周,发现最接近答案的是“无法将 aspx 中的日期更新为 MS-ACCESS 表”。主要的答案是将参数更改为 a ShortDateString
。我试过没有效果。还建议将日期括在 中#
,因为这是 Access 在其自己的查询中所做的。不幸的是,这也不起作用。
我不知道为什么其中任何一个都是必要的,因为日期的格式与 Insert 语句中的格式完全相同,而且效果很好。我在这里束手无策,因为我发现使该查询起作用的唯一方法是删除日期参数(这会破坏查询的主要目的)。