Question

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 possible. 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.

Was it helpful?

Solution

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 MemberInfos.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top