将日期时间插入数据库

Posted

技术标签:

【中文标题】将日期时间插入数据库【英文标题】:Insert date time into database 【发布时间】:2014-10-09 15:49:27 【问题描述】:

我正在使用 OleDbCommand 使用参数插入日期/时间字段,并收到一个异常说明“条件表达式中的数据类型不匹配”。

我已确定导致我的问题的参数,执行以下代码会导致我的错误:

insertCmd.CommandText = "INSERT INTO myTable ([ParameterName]) VALUES (?)"
insertCmd.Parameters.AddWithValue("@ParameterName", Now)
insertCmd.Connection = _connection
return insertCmd.ExecuteNonQuery()

检查导致问题的参数,我得到以下参数 @ParameterName

ChangeID: 1
DbType: DateTime 6
Direction: Input 1
IsNullable: False
Offset: 0
OleDbType: DBTimeStamp 135
ParameterName: "@ParameterName"
Precision: 0
PrecisionInternal: 0
Scale: 0
ScaleInternal: 0
Size: 0
SourceColumn: ""
SourceColumnNullMapping: False
SourceVersion: Current 512
Value: #10/9/2014 11:26:15 AM# Date

它似乎被识别为DbType DateTime,并且插入参数的Object是一个Date对象,但它仍然告诉我数据类型有问题。

我看到这个问题的大多数地方都试图将字符串写入日期/时间字段,我绝对没有这样做。

【问题讨论】:

你应该格式化它,以获得更好的兼容性,如 yyyy-MM-dd 您是否将 OleDB 与 SQL 服务器一起使用?实际的数据库列数据类型是什么? 我最好的猜测是您的数据库表列未定义为日期时间。 ...正确的日期没有格式 我正在使用 OleDb,我的字段数据类型是设计视图中的日期/时间。 【参考方案1】:

尝试仅使用日期值,因为您的数据库字段似乎只是日期值(我猜):

insertCmd.Parameters.AddWithValue("@ParameterName", Now.Date)

也可能是OleDB只是被类型弄糊涂了,自己设置吧:

Dim p As New OleDbParameter("@parameterName", OleDbType.Date)
p.Value = Now
insertCmd.Parameters.Add(p)

【讨论】:

这确实使异常消失了,但该字段将 MM/dd/yyyy hh:mm:ss 存储在先前的记录条目中。 (我正在将一些旧软件转换为 vb.net) @AndrewMiller 更新了帖子。尽量避免使用 AddWithValue 方法。 OleDB 似乎不喜欢 DateTime 对象。 你是对的。它被类型弄糊涂了,并称它为 OleDbType.DBDate 而不是 OleDbType.Date。两者都映射到 DateTime,但我猜在写入数据库之前对数据的内部检查发现我在上面看到的值中有 hh:mm:ss。 DBDate 使用 yyyymmdd 格式。

以上是关于将日期时间插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

将日期和时间插入数据库的 SQL 语法

如何将日期时间值插入 SQLite 数据库?

将日期插入 MySQL 数据库时如何忽略时间戳

将日期插入数据库时​​如何替换错误的日期?

将具有日期时间索引的行插入数据框

将日期插入mysql数据库时,时间减少一天