将DateTime值作为参数传递给OleDbCommand

时间:2011-07-01 19:09:02

标签: c# datetime oledbparameter

我在将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 + "#)";

3 个答案:

答案 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