3

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

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

4

1 回答 1

1

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

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

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

另一种方法是将值作为类型化成员传递——例如,在 dapper 中,我们将参数作为包装对象(通常是匿名类型)传递——然后我们可以检查来自MemberInfos.

于 2011-08-12T22:21:45.403 回答