Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写入时数据类型不匹配,读取工作正常_C#_Ms Access_Webforms_Datasource - Fatal编程技术网

C# 写入时数据类型不匹配,读取工作正常

C# 写入时数据类型不匹配,读取工作正常,c#,ms-access,webforms,datasource,C#,Ms Access,Webforms,Datasource,在.NET 3.5的ASP.NET WebForms项目中,数据传输到Access数据库。该网站在Windows2003(英文版)上的IIS6上运行 在ASPX文件中,AccessDataSource用于读取和写入数据。读取数据工作正常,但写入日期失败。但是,如果提供的日期是MM-dd-yyyy,但dd.MM.yyyy不起作用,则可以编写。如果提供的日期为dd.mm.yyy,则会出现以下错误: System.Data.OleDb.OleDbException: Data type mismatc

在.NET 3.5的ASP.NET WebForms项目中,数据传输到Access数据库。该网站在Windows2003(英文版)上的IIS6上运行

在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();
导致此错误的代码示例:

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();
区域和语言设置设置为德语,因此日期格式正确。 在数据库中,日期和时间存储在DateTime字段中

在不更改数百页遗留代码的情况下,我必须配置什么才能更正此错误?

将其更改为

DateTime.Now.ToString("yyyy-MM-dd")
如果您试图插入CurrentDateTime,您可以执行以下操作

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

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

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

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


重新启动IIS后,一切都完美无瑕。

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

以下是如何使用它:

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


这对阅读信息没有任何好处。。。您能否发布代码、架构,或者告诉我们特定字段的数据类型是什么,日期字段的数据类型是什么。。这是一个真实的数据时间字段、时间戳、varchar…等等。。。请提供更多有用的信息感谢您的建议,我添加了有关数据库的代码和信息。感谢您的评论,但我无法更改项目中的所有文件。这将是一种冒险的方式。