65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 中的 IDbDataParameter 错误

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.40/5 (7投票s)

2006年9月11日

CPOL
viewsIcon

29763

如何解决将 DateTime 赋值给 IDbDataParameter 时出现的错误。

引言

我想更新我的一个项目,该项目使用泛型、属性和反射来简化数据库访问。我最初的项目使用了像 SqlConnectionSqlCommandSqlDataReader 这样的数据库类,但为了支持更多数据库类型(MS SQL、MS MDB 和 MS SDF),我需要隔离数据库相关的代码并使用通用的接口,如 IDbConnectionIDbCommandIDataReader

当我将数据写回数据库时,我现在使用如下代码

IDbCommand         command    = connection.CreateCommand();

// ... adding each parameter like this
IDbDataParameter   param      = command.CreateParameter();
param.DbType                  = DbType.DateTime;
param.ParameterName           = <Field Name>;
param.Value                   = DateTime.New;
command.Parameters.Add(param);
command.CommandText           = <some SQL code with @-codes>;
command.Transaction           = null;
command.CommandTimeout        = 2000;
command.ExecuteNonQuery();

条件表达式中的数据类型不匹配

当我将 DateTime 值赋值给 param.Value 时,我得到了“条件表达式中的数据类型不匹配”异常。

在互联网上花费了一些时间后,我找到了一种解决方案,有人将 DateTime 对象转换为 string,如下所示

param.DbType        = DbType.DateTime;
param.ParameterName = <Field Name>;
param.Value         = DateTime.New.ToString();

.NET Framework 中的错误

有趣的是,DateTime 赋值在我的应用程序的一个地方工作,但在其他地方却不行。在尝试了一些方法后,我发现这 .NET Framework 中的一个错误。

如果赋值的 DateTime 包含一个非 0(零)的毫秒值,则会抛出异常。如果毫秒值为 0,则不会抛出异常。

所以这段代码可以正常工作

param.Value = new DateTime(2006, 05, 04);

因为构造的 DateTime 具有 0 的毫秒值。

© . All rights reserved.