我在将DateTime值作为DbParameter传递给查询时遇到问题。似乎DateTime值的时间部分被剥离了。
以下是C#中的示例代码:
DbProviderFactory _factory = OleDbFactory.Instance;
DbCommand cmd = _factory.CreateCommand();
cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (?)";
DbParameter p = _factory.CreateParameter();
p.ParameterName = ""; // Not necessary
p.Value = DateTime.Now; // assume Time != 00:00:00
p.DbType = DbType.Date; // DateTime and DateTime2 don't work
cmd.Parameters.Add(p);
我的问题是,Date参数似乎没有达到Access的时间部分,SomeDateField的时间总是为00:00:00。
我不想做类似的事情:
cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (#" + aDateTimeString + "#)";
答案 0 :(得分:0)
确保SomeDateField
的数据类型为DateTime
而非Date
。另外,尝试制作
p.DbType = DbType.DateTime;
答案 1 :(得分:0)
当您使用OleDbType.DateTime
代替DbType.Date
时,我确信它会起作用。
但是,正如我从你的帖子中所理解的那样,你不想这么具体,并使用更一般的DbType枚举(和类)?
但是,我认为您应该在数据访问层中使用更具体的OleDb类。使用较少指定的'DbType'类是没用的,因为当你定位另一个数据库类型时,你的SQL语法也必须改变,因为每个DBMS都使用自己的方言(有时只是微小的变化,但仍然......)。
答案 2 :(得分:0)
OleDbType没有DateTime enumeraton http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype.aspx
如果使用DBType.DateTime,“参数的类型特定于.NET Framework数据提供程序。在将值传递给数据源之前,指定类型会将Parameter的值转换为数据提供程序Type。如果未指定类型,ADO.NET将从Parameter对象的Value属性中推断出参数的数据提供者类型。“ http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx