0

我有一个 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 语句中的格式完全相同,而且效果很好。我在这里束手无策,因为我发现使该查询起作用的唯一方法是删除日期参数(这会破坏查询的主要目的)。

4

1 回答 1

1

在您的查询中,参数的顺序不同,顺序必须匹配:

    cmd.Parameters.AddWithValue("@NextTestDate", nextTestDate);     
    cmd.Parameters.AddWithValue("@DeviceID", deviceId);

匹配:

UPDATE tblDevice 
SET tblDevice.NextTestDate = @nextTestDate, <--- Param 1
    tblDevice.FirstNoticeDate = Null, 
    tblDevice.SecondNoticeDate = Null 
WHERE DeviceID=@deviceId;                   <--- Param 2
于 2013-03-26T17:32:35.030 回答