C# 我如何使用Oledb从数据库中获取值,我一直在获取DBNull异常?

C# 我如何使用Oledb从数据库中获取值,我一直在获取DBNull异常?,c#,dbnull,C#,Dbnull,代码抛出 “未处理InvalidCastException,无法将对象从DBNull强制转换为其他类型” 是的,我使用的是正确的列,是的,整个列都有值。奇怪的是,有时程序会运行,但下一次它会再次出现异常。问题可能出在数据库中的数据类型上吗?它被设置为Number,字段大小属性被设置为Integer请尝试一些缓解措施: int weaponDamage = Convert.ToInt32(dt.Rows[randomItem][2]); // dt= DataTable // randomItem

代码抛出

“未处理InvalidCastException,无法将对象从DBNull强制转换为其他类型”

是的,我使用的是正确的列,是的,整个列都有值。奇怪的是,有时程序会运行,但下一次它会再次出现异常。问题可能出在数据库中的数据类型上吗?它被设置为Number,字段大小属性被设置为Integer

请尝试一些缓解措施:

int weaponDamage = Convert.ToInt32(dt.Rows[randomItem][2]);
// dt= DataTable
// randomItem = randomly chooses a row from the datatable
检查该列的值是否不是NULL。然后将该值安全转换为int


老实说,你没有理由一次随机得到一个值,然后下一次得到一个空值。这意味着表中的数据正在更改,或者您正在查看不同的数据行?不确定,但我会在其中添加一些防御性代码以提供帮助。

如果您首先打印返回值以查看它是数字、字符串还是随机对象,会怎么样。您还应该使用适当的try/catch块来避免未处理的异常

int weaponDamage = 0;

if (dt.Rows[randomItem][2] != DBNull.Value){ // I think, I'm doing this from memory.
    if (int.TryParse(dt.Rows[randomItem][2].ToString(), out weaponDamage){
        // Do whatever you need.
    }
}