- 締切済み
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
開発環境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"];でエラーが発生しタイトルのようなメッセージが出ます。いろいろ試行錯誤しましたが解決しません。どうかよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- lawson
- ベストアンサー率44% (29/65)
sqlReader14["DepartureTimeInt"].GetType().ToString() の内容を実行時に、デバッガで、調べましょう。 そして、本当にint型でのキャストでよいのか 調べましょう。 sqlReader14[ の内部で例外が発生しているケースでは、 No1さんのような対策をしてください。 本当にNo1さんの対策でよいのかを調べるために sqlReader14.IsDBNull(●) の部分の評価値のbool値をデバッガで 実行時で除いてみましょう。 開発対象のシステムでのDBから取得される型 がint, string, DateTimeなどに限定されるようで あれば、IsDBNullのチェックおよび、 .GetType().ToString()の型の判定や、 データの取得ロジックなどの共通化を 検討しましょう。 リフレクションや、VS2005以降のGeneric等を 用いて自動的に、Beanに結果が格納されるような もちろん、今回の質問事項も解決されて、吸収された フレームワークを作ってしまいましょう。 以上。
- 7marine
- ベストアンサー率36% (59/160)
sqlReader14["DepartureTimeInt"]がnullである可能性があります int empFD; if (!sqlReader14.IsDBNull(●)){ empFD = (int)sqlReader14["DepartureTimeInt"]; } などの対策が必要です