我正在使用通用IDbCommand函数(在非sqlCommand辅助方法中)将sqlCommand.DbType设置为DbType.Date,类似于:
var param = command.CreateParameter(); param.DbType = DbType.Date; param.ParameterName = field; param.Value = ToDb(val); command.Parameters.Add(param);
生成的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 /框架中继承可能Date不存在,并且假设人们不知道DbType.Date和DbType.DateTime之间的区别是合理的吗?还是有更基本的事情发生?
是否有一个没有特殊套管sqlParameter的实际解决方法?
(我今天早上发现这个搜索的参考文献很少,所以也许有一些更明显的东西,我会在另一轮咖啡因之前失踪?总是很感激!)
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。