Set the DbParameter.DbType of a null value in a generic way?
I've got a problem with SQL update statements when I pass null values (or better let's say DbNull values) to a DbParameter object. When I pass the DbNull value to the Value property, the DbType of the DbParameter object is still STRING.
If I try to write into a binary field ( varbinary(max) ), I got an exception that the conversion between varchar and varbinary is not possib开发者_JS百科le. So in that case I have to set the DbType by my own. My question is now, how do I get the DbType from an .Net type. I want to be this generic, so I can use my methods with other databases. I couldn't find anything usefull in the MSDN documentation. If someone can get me some hints how to solve this, I would appreciate this. Or maybe I'm on the wrong path. I'm not sure for the moment.
The best thing I can suggest there is to use a generic method to add the parameter, i.e.
... Foo<T>(T value, ...)
That way, you can check typeof(T)
even if value
is null
. You would then need to switch on the type of T
and hard-code the relationship. A switch
on Type.GetTypeCode(...)
makes things fairly easy.
Another approach is to pass the values in as typed members - for example, in dapper we pass the parameters in as a wrapper object (typically an anonymous type) - then we can inspect the types from the MemberInfo
s.
精彩评论