我正在使用通用的IDbCommand函数(在非SqlCommand帮助方法中)将SqlCommand.DbType设置为DbType.Date,类似于下面的示例代码:
所以强制转换是有意的,而我必须做一些hacky的事情,例如:
我的问题是为什么要强制转换?这是从早期版本的Sql Server/framework继承下来的吗?也许当时还不存在Date,所以合理地假设人们不知道DbType.Date和DbType.DateTime之间的区别?还是有更根本的原因?
是否有实际的解决方法而不需要特殊处理SqlParameter?
今天早上我搜索了很少的参考资料,也许我只是漏掉了更明显的东西,需要再来一轮咖啡因刺激?总是感激不尽!
var param = command.CreateParameter();
param.DbType = DbType.Date;
param.ParameterName = field;
param.Value = ToDb(val);
command.Parameters.Add(param);
结果参数的DbType被覆盖为DbType.DateTime。(我故意想要SqlDbType.Date,因为列/索引是Sql Server类型Date,而不是DateTime。)确实,当我反编译时,发现SqlParameter.DbType设置调用MetaType.GetMetaTypeFromDbType,其中包括:
internal static MetaType GetMetaTypeFromDbType(DbType target)
{
switch (target)
{
...
case DbType.Date:
case DbType.DateTime:
return MetaType.MetaDateTime;
}
}
所以强制转换是有意的,而我必须做一些hacky的事情,例如:
var param = command.CreateParameter();
var sqlParam = param as SqlParameter;
if (sqlParam != null)
{
sqlParam.SqlDbType = SqlDbType.Date;
}
else
{
param.DbType = DbType.Date;
}
param.ParameterName = field;
param.Value = ToDb(val);
command.Parameters.Add(param);
我的问题是为什么要强制转换?这是从早期版本的Sql Server/framework继承下来的吗?也许当时还不存在Date,所以合理地假设人们不知道DbType.Date和DbType.DateTime之间的区别?还是有更根本的原因?
是否有实际的解决方法而不需要特殊处理SqlParameter?
今天早上我搜索了很少的参考资料,也许我只是漏掉了更明显的东西,需要再来一轮咖啡因刺激?总是感激不尽!