0
int weaponDamage = Convert.ToInt32(dt.Rows[randomItem][2]);
// dt= DataTable
// randomItem = randomly chooses a row from the datatable

该代码抛出

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

是的,我使用的是正确的列,是的,整个列都有值。奇怪的是有时程序运行了,但下一次它又给出了异常。问题可能出在我在数据库中的数据类型上吗?它设置为 Number 并且 Field Size 属性设置为 Integer

4

2 回答 2

1

尝试一些缓解措施:

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

检查该列是否具有除 NULL 以外的值。然后将该值安全转换为 int。

老实说,没有理由你应该随机获得一个值,然后下一次是 NULL。这意味着表中的数据正在发生变化,或者您正在查看不同的数据行?不确定,但我会在其中添加一些防御性编码来提供帮助。

于 2013-02-22T15:13:51.770 回答
0

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

于 2013-02-22T15:15:25.510 回答