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 に答える