我在将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 + "#)";
确保SomeDateField
的数据类型是DateTime
而不是Date
。此外,尝试制作
p.DbType = DbType.DateTime;
当您使用OleDbType.DateTime
而不是DbType.Date
时,我相信它会起作用。
但是,正如我从你的帖子中了解到的,你不想这么具体,并使用更通用的DbType枚举(和类(?
然而,我认为您应该在数据访问层中使用更具体的OleDb类。使用指定较少的"DbType"类是没有用的,因为当你针对另一种数据库类型时,你的SQL语法很可能也会发生变化,因为每个DBMS都使用自己的方言(有时只是小的变化,但仍然…(。
如果使用DBType.DateTime,"参数的类型特定于.NET Framework数据提供程序。在将值传递给数据源之前,指定类型会将参数的值转换为数据提供程序类型。如果未指定类型,ADO.NET将从parameter对象的value属性推断参数的数据提供程序type。"http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx