将日期插入 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 数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章
从 JAVA 访问存储在 MS-Access 数据库中的日期/时间数据