• 締切済み

「指定されたキャストは有効ではありません。」とエラーが出てしまいます。

開発環境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"];でエラーが発生しタイトルのようなメッセージが出ます。いろいろ試行錯誤しましたが解決しません。どうかよろしくお願いします。

みんなの回答

  • lawson
  • ベストアンサー率44% (29/65)
回答No.2

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)
回答No.1

sqlReader14["DepartureTimeInt"]がnullである可能性があります int empFD; if (!sqlReader14.IsDBNull(●)){ empFD = (int)sqlReader14["DepartureTimeInt"]; } などの対策が必要です

関連するQ&A