在.NET WebForms Project for .NET 3.5中,数据被传输到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();
“区域和语言设置”设置为德语,因此设置为正确的日期格式。 在数据库中,日期和时间存储在DateTime字段中。
如果不改变遗留代码页面的内容,我有什么方法可以纠正这个问题?
答案 0 :(得分:0)
将其更改为
DateTime.Now.ToString("yyyy-MM-dd")
如果您尝试插入CurrentDateTime,您可以这样做
"INSERT INTO [table1] " +
"([Value], [Date]) VALUES ('data', Now())";
答案 1 :(得分:0)
我通过更改App Pool用户的区域设置解决了这个问题(在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重新启动后,一切都运行良好。
答案 2 :(得分:0)
这只是一个危险的解决方法。您的核心问题是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())";