プロが教えるわが家の防犯対策術!

開発環境VisualStudio.NET 開発言語C#です。
データベースに接続しデータを取り出すコードの一部ですが「指定されたキャストは有効ではありません。」と表示されます。

while( sqlReader14.Read() )
{
int empTD2 = (int)sqlReader14["LineNumber"];


if(empTD2 == time)
{
int empFD = (int)sqlReader14["DepartureTimeInt"];
int empED = (int)sqlReader14["ArrivalTimeInt"];
string empFFD = sqlReader14["DepartureTime"].ToString();
string empEED = sqlReader14["ArrivalTime"].ToString();

if(950 >= ViaTime)
{
TimeGet4 = empFFD;
TimeGet5 = empEED;
goto Labelc;
}

}
}
Labelc:;


実行しソフトを操作するとint empFD = (int)sqlReader14["DepartureTimeInt"];でエラーが発生しタイトルのようなメッセージが出ます。いろいろ試行錯誤しましたが解決しません。どうかよろしくお願いします。

A 回答 (2件)

sqlReader14["DepartureTimeInt"].GetType().ToString()


の内容を実行時に、デバッガで、調べましょう。
そして、本当にint型でのキャストでよいのか
調べましょう。


sqlReader14[
の内部で例外が発生しているケースでは、
No1さんのような対策をしてください。

本当にNo1さんの対策でよいのかを調べるために

sqlReader14.IsDBNull(●)
の部分の評価値のbool値をデバッガで
実行時で除いてみましょう。

開発対象のシステムでのDBから取得される型
がint, string, DateTimeなどに限定されるようで
あれば、IsDBNullのチェックおよび、
.GetType().ToString()の型の判定や、
データの取得ロジックなどの共通化を
検討しましょう。

リフレクションや、VS2005以降のGeneric等を
用いて自動的に、Beanに結果が格納されるような
もちろん、今回の質問事項も解決されて、吸収された
フレームワークを作ってしまいましょう。

以上。
    • good
    • 2

sqlReader14["DepartureTimeInt"]がnullである可能性があります



int empFD;
if (!sqlReader14.IsDBNull(●)){
empFD = (int)sqlReader14["DepartureTimeInt"];
}
などの対策が必要です
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A