试图插入DateTime.Now到日期/时间域给出了“数据类型不匹配”错误(Trying to in

2019-09-01 03:50发布

如果我尝试日期时间写在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);

但这样做这样似乎不太整齐,那么简单。 为什么是这个必要吗? 我俯瞰简单的东西?

Answer 1:

条件表达式中的不匹配的问题是由于分配给用于当调用来表示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);
}

哦,等待有人解释这更好的。



Answer 2:

最简单的语句要求数据库引擎使用它的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