将日期插入 Ms-Access 数据库的问题

Posted

技术标签:

【中文标题】将日期插入 Ms-Access 数据库的问题【英文标题】:Problem with inserting date to Ms-Access database 【发布时间】:2011-06-23 04:18:58 【问题描述】:

我的Ms-Access 数据库表中有一个短日期格式的日期字段。

我在我的 C# 程序 DateTimePicker 中有 dd/MM/yyyy short 日期格式的控件

我尝试使用这样的 C# 代码插入数据:

SQL = "insert into MyTbl(D_from,D_to) values (@MyFrom,@MyTo)";
OleDbCommand Cmd = Conn.CreateCommand();
OleDbParameter dateparam1 = Cmd.Parameters.AddWithValue("@MyFrom", DbType.DateTime);
dateparam1.Value = dt_From.Value; 

OleDbParameter dateparam2 = Cmd.Parameters.AddWithValue("@MyTo", DbType.DateTime);
dateparam2.Value = dt_To.Value;

Cmd.CommandText = SQL;
Cmd.ExecuteNonQuery();

我得到了错误:Data type mismatch in criteria expression.

【问题讨论】:

【参考方案1】:

将 Parameters.AddWithValue 更改为 Parameters.Add

Cmd.Parameters.Add("@MyFrom", DbType.DateTime);

如果您使用Parameters.AddWithValue,那么您需要将Value 作为第二个Parameter 传递,而不是DataType

Cmd.Parameters.AddWithValue("@MyFrom", dt_From.Value);

您还需要将CommandType 设置为Text

【讨论】:

OleDbCommand Cmd = Conn.CreateCommand(); Cmd.Parameters.AddWithValue("@MyFrom", dt_From.Value); Cmd.Parameters.AddWithValue("@MyTo", dt_To.Value); Cmd.CommandText = SQL; Cmd.ExecuteNonQuery();【参考方案2】:

看看这个问题

Data type mismatch in criteria expression | Access, OleDb, C#

【讨论】:

【参考方案3】:

试试这个

dateparam1.Value = dt_From.Value.ToShortDateString();
dateparam2.Value = dt_To.Value.ToShortDateString();

否则看看这个:

日期值必须根据 ODBC 规范日期格式分隔或由日期时间分隔符 ("#") 分隔。否则,Microsoft Access 会将值视为算术表达式,不会引发警告或错误。

例如,日期“1996 年 3 月 5 日”必须表示为 d '1996-03-05' 或 #03/05/1996#;否则,如果仅提交 03/05/1993,Microsoft Access 会将其计算为 3 除以 5 除以 1996。此值向上舍入为整数 0,并且由于零日映射到 1899-12-31,因此这是使用日期。

管道字符 (|) 不能用于日期值,即使用反引号括起来。

【讨论】:

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

在 MS-Access 中插入带日期时间的 SQL 命令

从 JAVA 访问存储在 MS-Access 数据库中的日期/时间数据

如何将日期从 C# 存储到 MS-Access 以及如何检索它?

将文本框中的值插入 2 个不同的表 ms-access

尝试使用“插入”ms-access 数据库时出错

ms-access:仅显示特定日期内记录的报告