以通用方式设置空值的DbParameter.DbType?

时间:2011-08-12 22:05:17

标签: c# sql null varbinarymax

当我传递空值时,我遇到了SQL更新语句的问题 (或者更好的说DbNull值)到DbParameter对象。 当我将DbNull值传递给Value属性时,DbType的值为 DbParameter对象仍然是STRING。

如果我尝试写入二进制字段(varbinary(max)),我得到一个例外,即 varchar varbinary 之间的转换是不可能的。所以在这种情况下,我必须自己设置DbType。我现在的问题是,如何从中获取DbType .Net类型。我希望这是通用的,所以我可以将我的方法与其他方法一起使用 数据库。我在MSDN文档中找不到任何有用的东西。 如果有人能给我一些提示如何解决这个问题,我将不胜感激 这个。或许我走错了路。我现在不确定。

1 个答案:

答案 0 :(得分:1)

我能建议的最好的事情是使用通用方法来添加参数,即

... Foo<T>(T value, ...)

这样,即使typeof(T)value,您也可以检查null。然后,您需要打开T的类型并对关系进行硬编码。 switchType.GetTypeCode(...)使事情相当容易。

另一种方法是将值作为类型成员传递 - 例如,在dapper中我们将参数作为包装器对象(通常是匿名类型)传递 - 然后我们可以从MemberInfo s检查类型