将DateTime值作为参数传递给OleDbCommand

本文关键字:参数传递 OleDbCommand DateTime | 更新日期: 2023-09-27 18:01:09

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

将DateTime值作为参数传递给OleDbCommand

确保SomeDateField的数据类型是DateTime而不是Date。此外,尝试制作

p.DbType = DbType.DateTime;

当您使用OleDbType.DateTime而不是DbType.Date时,我相信它会起作用。

但是,正如我从你的帖子中了解到的,你不想这么具体,并使用更通用的DbType枚举(和类(?

然而,我认为您应该在数据访问层中使用更具体的OleDb类。使用指定较少的"DbType"类是没有用的,因为当你针对另一种数据库类型时,你的SQL语法很可能也会发生变化,因为每个DBMS都使用自己的方言(有时只是小的变化,但仍然…(。

OleDbType没有DateTime枚举器http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype.aspx

如果使用DBType.DateTime,"参数的类型特定于.NET Framework数据提供程序。在将值传递给数据源之前,指定类型会将参数的值转换为数据提供程序类型。如果未指定类型,ADO.NET将从parameter对象的value属性推断参数的数据提供程序type。"http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx