日期:2014-05-17  浏览次数:21085 次

C#程序中“指定的转换无效”的解决方案

?

“指定的转换无效”的解决方案:

?

发生该错误有以下几种情况:

?

第一:数据库字典的数据类型与程序中的不同。

?

??????? 例如:在Oracle数据库中number(10,5)对应到程序中应为double类型。

?

??????? 解决方案:将数据模型中相应的字段类型进行修改。

?

??????? 比较容易出错的是:Oracle中的number(10,5)对应到程序,应为double类型。

?????????????????????????????????????????????????? number(5)对应到程序中的int类型(根据自己的情况,short、int、long均可,不过在使用long时,model中也要相应修改为long)。

?

第二:在读取数据库数据之前没有空值判断。 即,直接从数据库中读取出某一字段,没有对其进行空值判断。

?

?????? 解决方案一:在程序中做空值判断。

if (!Convert.IsDBNull(reader["UNIT_CODE"]))
                    {
                        drugMedicalInfo.UNIT_CODE = reader.GetString(reader.GetOrdinal("UNIT_CODE"));
                    }

?

????? 解决方案二:在定义数据库模型(/数据结构)时,使用可空类型。

?

public class XXModel
{
    int ? ID {get; set;}
    ....
}

?

第三:跨线程调用导致的“指定的转换无限”问题。

?

????? 对于这种情况,还未遇到过。不过这儿有一参考:

?

.NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出“指定的转换无效”异常的原因

?

?

?

?

?