gpt4 book ai didi

c# - SqlParameter DbType.Date -> SqlDbType.DateTime 转换

转载 作者:太空狗 更新时间:2023-10-29 23:49:41 29 4
gpt4 key购买 nike

我正在使用通用 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/framework 继承下来的吗?在早期版本中 Date 可能不存在,并且假设人们不知道 DbType.Date 和 DbType.DateTime 之间的区别是合理的吗?还是有更根本的事情发生了?

是否有没有特殊外壳 SqlParameter 的实际解决方法?

(令人惊讶的是,今天早上我发现很少有引用资料,所以也许在另一轮咖啡因之前我错过了一些更明显的东西?总是很感激!)

最佳答案

供引用,因为我只需要自己解决这个问题:

Permalink (as it's moved)

Current (as of 2018-04-11)

关于c# - SqlParameter DbType.Date -> SqlDbType.DateTime 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510660/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com