【问题标题】:Data type mismatch on write, reading works fine写入时数据类型不匹配,读取工作正常
【发布时间】:2015-05-19 05:29:21
【问题描述】:

在 .NET 3.5 的 ASP.NET WebForms 项目中,数据被传输到 Access 数据库。该站点在 Windows 2003(英文版)的 IIS 6 上运行。

在 ASPX 文件中,AccessDataSource 用于读取和写入数据。读取数据工作正常,但写入日期失败。但写作工作,如果日期提供为 MM-dd-yyyy,但 dd.mm.yyyy 不起作用。如果日期以 dd.mm.yyy 的形式提供,我会收到此错误:

System.Data.OleDb.OleDbException: Data type mismatch in criteria expression.

导致此错误的代码示例:

AccessDataSource myAds = new AccessDataSource("~/App_Data/mydb.mdb", "");
myAds.InsertCommand =
    "INSERT INTO [table1] " +
    "([Value], [Date]) VALUES ('data', DateValue('" + DateTime.Now.ToString("dd.MM.yyyy") + "'))";
myAds.Insert();

区域和语言设置设置为德语,因此日期格式正确。 在 Database 中,日期和时间存储在 DateTime 字段中。

在不更改数百页遗留代码的情况下,我必须配置什么来纠正这个问题?

【问题讨论】:

  • 这对阅读消息没有任何好处...您可以发布代码、架构和/或告诉我们特定字段的数据类型是什么对于日期字段是什么......是这是一个真正的数据时间字段,时间戳,varchar ...等...请提供更多有用的信息
  • 感谢您的建议,我添加了有关数据库的代码和信息。

标签: c# ms-access webforms datasource


【解决方案1】:

改成

DateTime.Now.ToString("yyyy-MM-dd")

如果您尝试插入 CurrentDateTime 您可以这样做

 "INSERT INTO [table1] " +
"([Value], [Date]) VALUES ('data', Now())";

【讨论】:

  • 感谢您的评论,但我根本无法更改项目中的所有文件。那将是冒险的方式。
【解决方案2】:

我通过更改应用程序池用户的区域设置解决了这个问题(在 Windows 2003 上它是“网络服务”)。

为此,我不仅为管理员设置了区域设置,还为默认用户帐户设置了区域设置(请参阅“区域和语言设置”对话框中最后一个选项卡上的复选框)。

重启后,我从默认用户数据设置中导出了HKEY_USERS\.DEFAULT\Control Panel\International 的内容。然后我编辑了 .reg 文件并为 ID 为 S-1-5-20 的 Network Sercice 用户将其导入HKEY_USERS\S-1-5-20\Control Panel\International

重新启动 IIS 后,一切正常。

【讨论】:

    【解决方案3】:

    这只是一种危险的解决方法。您的核心问题是您错过将日期值转换为有效字符串表达式或从函数插入日期值的 SQL 表达式。您可以使用 DateValue 但不能使用德语格式的字符串作为参数:

    具体方法如下:

    myAds.InsertCommand =
        "INSERT INTO [table1] " +
        "([Value], [Date]) VALUES ('data', #" + DateTime.ToDay.ToString("yyyy'/'dd'/'MM") + "#)";
    

    或:

    myAds.InsertCommand =
        "INSERT INTO [table1] " +
        "([Value], [Date]) VALUES ('data', Date())";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多