2011-08-12 32 views
3

当我传递NULL值 (或者更好的说是DbNull值)到DbParameter对象时,我遇到了SQL更新语句的问题。 当我将DbNull值传递给Value属性时,DbParameter对象的DbType仍为STRING。以通用方式设置空值的DbParameter.DbType?

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

+0

直接的解决方案是手动使用开关(dbType)用于您使用的类型 – sll

+0

当对象值为空时,您无法获取对象的类型,因此我无法设置DbType。它是一条死路... – msfanboy

+0

@Dissy你说的开关/外壳的默认值?你将如何使用开关盒?我会告诉你一点我的代码,我不认为我的方法适用于你的建议... – msfanboy

回答

0

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

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

这样的话,你可以检查typeof(T)即使valuenull。然后您需要打开T的类型并对关系进行硬编码。 Type.GetTypeCode(...)上的switch使事情变得相当容易。

另一种方法是通过在作为类型的成员的值 - 例如,在hardy我们通过在作为包装对象(通常是一个匿名类型)的参数 - 然后我们可以从MemberInfo小号检查类型。

+0

谢谢马克只想发布样本,但我认为它不需要。我也考虑过使CreateParameter (T值,字符串标记)。在这个时候,我认为没有人比你更了解这个领域;-) – msfanboy

相关问题