试图插入日期时间.现在在Date/Time字段中显示“数据类型不匹配”;错误
本文关键字:显示 数据类型 不匹配 错误 字段 Time 日期 插入 时间 Date | 更新日期: 2023-09-27 18:10:48
如果我尝试用简单的方法在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的参数的OleDbType。当你调用AddWithValue
.
AddWithValue选择的OleDbType是DBTimeStamp
,但是Access想要一个OleDbType.Date
。
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);
}
哦,好吧,等着有人更好地解释一下。
最简单的语句要求db引擎使用其Now()
函数来获取当前的Date/Time值。如果你对一天中的时间不感兴趣,你也可以使用它的Date()
功能;Date()
实际上会给你午夜作为一天的时间。
INSERT INTO [table] ([date]) VALUES (Now());
现在,您不需要在.Net
中修改日期/时间值,以便将其插入到Access db中。
如果你想要一个包含文字日期值的INSERT
语句,使用#
日期分隔符。插入今天的日期:
INSERT INTO [table] ([date]) VALUES (#2013-04-25#);