C# 是否以通用方式设置空值的DbParameter.DbType?

C# 是否以通用方式设置空值的DbParameter.DbType?,c#,sql,null,varbinarymax,C#,Sql,Null,Varbinarymax,当我传递空值时,SQL update语句有问题 (或者更好地说是DbNull值)到DbParameter对象。 当我将DbNull值传递给value属性时 DbParameter对象仍然是字符串 如果我试图写入一个二进制字段(varbinary(max)),我得到一个异常,即varchar和varbinary之间的转换是不可能的。因此,在这种情况下,我必须自己设置DbType。我现在的问题是,如何从 .Net类型。我希望是这样的泛型,这样我就可以将我的方法用于其他 数据库。我在MSDN文档中找不

当我传递空值时,SQL update语句有问题 (或者更好地说是DbNull值)到DbParameter对象。 当我将DbNull值传递给value属性时 DbParameter对象仍然是字符串

如果我试图写入一个二进制字段(varbinary(max)),我得到一个异常,即varcharvarbinary之间的转换是不可能的。因此,在这种情况下,我必须自己设置DbType。我现在的问题是,如何从 .Net类型。我希望是这样的泛型,这样我就可以将我的方法用于其他 数据库。我在MSDN文档中找不到任何有用的东西。 如果有人能给我一些如何解决这个问题的提示,我将不胜感激
这或者我走错了路。目前我还不确定。

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

... Foo<T>(T value, ...)
。。。Foo(T值,…)
这样,即使
value
null
,也可以检查
typeof(T)
。然后,您需要打开
T
的类型,并对关系进行硬编码。打开
Type.GetTypeCode(…)
开关使事情变得相当简单


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

简单的解决方案是使用switch(dbType)手动为您正在使用的类型当对象值为null时,您无法获取对象的类型,因此我无法设置DbType。这是一条死胡同…@Dissy你说的是开关/机箱的默认设置吗?您将如何使用开关盒?我将向你展示我的代码,我认为我的方法不符合你的建议…谢谢Marc,我只是想发布一个示例,但我认为它不需要。我还考虑了创建CreateParameter(T值、字符串标记)。我想在这方面没有人比你更了解;-)