简体   繁体   中英

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

The best thing I can suggest there is to use a generic method to add the parameter, ie

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM