如果我尝试日期时间写在MS-Access数据库记录的简单方法,像这样
cmd.CommandText = "INSERT INTO [table] ([date]) VALUES (?)";
cmd.Parameters.AddWithValue("?", DateTime.Now);
我得到一个异常说“标准表达式中数据类型不匹配。”
谁能告诉我为什么? 错在这里?
一个小实验后,我发现我可以做,如果我写它的工作
OleDbParameter parm = new OleDbParameter("?", OleDbType.Date);
parm.Value = DateTime.Now;
cmd.Parameters.Add(parm);
但这样做这样似乎不太整齐,那么简单。 为什么是这个必要吗? 我俯瞰简单的东西?
条件表达式中的不匹配的问题是由于分配给用于当调用来表示DateTime.Now值的参数的OleDbType AddWithValue
。
通过AddWithValue choosen的OleDbType是DBTimeStamp
,但Access想要一个OleDbType.Date
。
http://support.microsoft.com/kb/320435
搜索在NET我已经找到另一个野趣提示。 核心问题在于无法处理DateTime.Now的毫秒部分OleDbParameter。 可能迫使OleDbType是日期省略毫秒部分。 我还发现,插入作品也与DBTIMESTAMP类型,如果我们从日移除毫秒。
cmd.Parameters.AddWithValue("?", GetDateWithoutMilliseconds(DateTime.Now));
private DateTime GetDateWithoutMilliseconds(DateTime d)
{
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second);
}
哦,等待有人解释这更好的。
最简单的语句要求数据库引擎使用它的Now()
函数来获得当前的日期/时间值。 或者你可以使用它的Date()
如果你不感兴趣,一天中的时间函数; Date()
实际上给你午夜天的时间。
INSERT INTO [table] ([date]) VALUES (Now());
IOW,不用您费心按摩的日期/时间值.Net
,以便将其插入到你的Access数据库。
如果你想要一个INSERT
语句中包含一个文本日期值,使用#
日期分隔符。 所以插入今天的日期:
INSERT INTO [table] ([date]) VALUES (#2013-04-25#);
文章来源: Trying to insert DateTime.Now into Date/Time field gives “Data type mismatch” error