繁体   English   中英

将 DateTime 值作为参数传递给 OleDbCommand

[英]Passing a DateTime value as a parameter to an OleDbCommand

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

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

如果使用 DBType.DateTime,“参数的类型特定于 .NET Framework 数据提供者。指定类型会将 Parameter 的值转换为数据提供者的类型,然后再将值传递给数据源。如果类型不是指定时,ADO.NET 从参数 object 的 Value 属性推断参数的数据提供者类型。“http://msdn.microsoft.com/en-us/library/system.x

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

p.DbType = DbType.DateTime;

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

但是,正如我从您的帖子中了解到的那样,您不想如此具体,而是使用更通用的 DbType 枚举(和类)?

但是,我认为您应该在数据访问层中使用更具体的 OleDb 类。 使用较少指定的“DbType”类是无用的,因为当您针对另一种数据库类型时,您的 SQL 语法也必须更改的可能性很大,因为每个 DBMS 都使用自己的方言(有时只有微小的变化,但仍然......)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM