当我传递空值时,我遇到了SQL更新语句的问题 (或者更好的说DbNull值)到DbParameter对象。 当我将DbNull值传递给Value属性时,DbType的值为 DbParameter对象仍然是STRING。
如果我尝试写入二进制字段(varbinary(max)),我得到一个例外,即 varchar 和 varbinary 之间的转换是不可能的。所以在这种情况下,我必须自己设置DbType。我现在的问题是,如何从中获取DbType .Net类型。我希望这是通用的,所以我可以将我的方法与其他方法一起使用 数据库。我在MSDN文档中找不到任何有用的东西。 如果有人能给我一些提示如何解决这个问题,我将不胜感激 这个。或许我走错了路。我现在不确定。
答案 0 :(得分:1)
我能建议的最好的事情是使用通用方法来添加参数,即
... Foo<T>(T value, ...)
这样,即使typeof(T)
为value
,您也可以检查null
。然后,您需要打开T
的类型并对关系进行硬编码。 switch
上Type.GetTypeCode(...)
使事情相当容易。
另一种方法是将值作为类型成员传递 - 例如,在dapper中我们将参数作为包装器对象(通常是匿名类型)传递 - 然后我们可以从MemberInfo
s检查类型