在access数据库中插入带时间的日期c#

insert date with time in access database c#

在访问中我只得到日期5/12/2015但没有时间,我需要这样的东西

5/12/2015 4:56 PM保存在access数据库

  DateTime dtclickdate = DateTime.Now;
  OleDbParameter clickdate = new OleDbParameter("@clickdate ", OleDbType.DBDate);
  clickdate.Value = dtclickdate; 
  cmd.Parameters.Add(clickdate);

您应该使用 OleDbType.DBTimeStamp 枚举,它映射到 DateTime:

DateTime dtclickdate = DateTime.Now;
OleDbParameter clickdate = new OleDbParameter("@clickdate ", OleDbType.DBTimeStamp);
clickdate.Value = dtclickdate; cmd.Parameters.Add(clickdate);

有关详细信息,请参阅 this documentation

看看the MSDN description of OleDbType:

DBDate: Date data in the format yyyymmdd (DBTYPE_DBDATE). This maps to DateTime.

如您所见,DBDate 不包含时间部分。我建议改用 Date

Date: Date data, stored as a double (DBTYPE_DATE). The whole portion is the number of days since December 30, 1899, and the fractional portion is a fraction of a day. This maps to DateTime.

根据以下 Microsoft 知识库文章,这是用于 Access Date/Time 字段的正确类型。

引自INFO: OleDbType Enumeration vs. Microsoft Access Data Types:

Access Type Name  Database Data Type  OLE DB Type  .NET Framework Type  Member Name
    ...
Date/Time         DateTime            DBTYPE_DATE  System.DateTime    OleDbType.Date
    ...

Whosebug 真的应该 add support for tables...

PS:注意是OLEDB does not like Milliseconds in Date/Time fields。如果您遇到 标准表达式中的数据类型不匹配 错误,请删除毫秒数:

dtm = New DateTime(dtm.Year, dtm.Month, dtm.Day, dtm.Hour, dtm.Minute, dtm.Second)

尝试 OleDbType.DBTimeStamp:

DateTime dtclickdate = DateTime.Now;
OleDbParameter clickdate = new OleDbParameter("@clickdate ", OleDbType.DBTimeStamp);
clickdate.Value = dtclickdate; 
cmd.Parameters.Add(clickdate);

原因:这也存储时间分数,如 here 所述。