c# – SqlParameter DbType.Date – > SqlDbType.DateTime转
发布时间:2020-12-15 21:04:32 所属栏目:百科 来源:网络整理
导读:我正在使用通用IDbCommand函数(在非SqlCommand辅助方法中)将SqlCommand.DbType设置为DbType.Date,类似于: var param = command.CreateParameter(); param.DbType = DbType.Date; param.ParameterName = field; param.Value = ToDb(val); command.Parameters
我正在使用通用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的实际解决方法? (我今天早上发现这个搜索的参考文献很少,所以也许有一些更明显的东西,我会在另一轮咖啡因之前失踪?总是很感激!) 解决方法
作为参考,因为我不得不自己解决这个问题:
Permalink (as it’s moved) Current (as of 2018-04-11) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |