※ ChatGPTを利用し、要約された質問です(原文:データ取得時のエラーに関して)
C#でデータ取得時のエラーに関して
2011/05/23 18:57
このQ&Aのポイント
C#でデータを取得する際にオブジェクトのキャストエラーが発生してしまう問題について教えてください。
変数に代入する段階でデータの存在がなくてもエラーが発生してしまう理由を教えてください。
データベースからデータを取得する際に起こる型の不一致エラーについて教えてください。
教えて下さい。
以下のようにC#で記述し、ODBC接続で単純にデータを取得するだけのものですが、
変数に代入する段階でエラーとなってしまいます。
取得項目がたまたまデータが存在しないという事だけですが、データがないからといって
エラーにはならないと思いますが。。。
尚、エラーの内容は、
型 'System.DBNull' のオブジェクトを型 'System.String' にキャストできません。
というエラーです。
初歩的な事で申し訳ありませんが、教えて下さい。
《記述内容》
int mst_cnt = 0;
int cLoop = 0;
string[] A;
string[] B;
string message;
A = null;
B = null;
OdbcConnection cn;
string MyString,Mycnt;
MyString = "SELECT 明細マスタ.A,"
+ "明細マスタ.B,"
+ " FROM 明細マスタ,"
+ "発注明細データ,"
+ "発注データ"
+ " WHERE 発注データ.発注番号 = 発注明細データ.発注番号"
+ " AND 発注明細データ.部品番号 = 明細マスタ.部品番号";
Mycnt = "SELECT COUNT(*) "
+ " FROM 明細マスタ,"
+ "発注明細データ,"
+ "発注データ"
+ " WHERE メカ部品発注データ.発注番号 = メカ部品発注明細データ.発注番号"
+ " WHERE 発注データ.発注番号 = 発注明細データ.発注番号"
+ " AND 発注明細データ.部品番号 = 明細マスタ.部品番号";
cn = new OdbcConnection("Driver={Microsoft ODBC for Oracle};Server=MRDKIKAN;"
+ "UID=MRDKIKAN;PWD=MRDKIKAN");
OdbcCommand cmd = new OdbcCommand(MyString, cn);
OdbcCommand cmdcnt = new OdbcCommand(Mycnt, cn);
cn.Open();
try
{
OdbcDataReader reader = cmdcnt.ExecuteReader();
reader.Read();
mst_cnt = reader.GetInt32(0);
図面番号 = new string[mst_cnt];
部品名 = new string[mst_cnt];
reader.Close();
reader = cmd.ExecuteReader();
while (reader.Read() == true)
{
図面番号[cLoop] = reader.GetString(0);
部品名[cLoop] = reader.GetString(1); ← ここでエラーとなってしまいます!!
cLoop += 1;
}
}
catch (Exception ex)
{
message = ex.Message;
return;
}
//MySQL切断
cn.Close();
質問の原文を閉じる
質問の原文を表示する
お礼
ありがとうございました。 教えて頂いた内容をヒントにようなく解決しました。 ありがとうございました!!
補足
ご回答ありがとうございます。 教えて頂いたように、IsDBNull関数を使用し、以下のように記述しましたが、 それでもエラーが消えません。。。 エラーの内容は同じです。 何が原因でしょうか??? 《記述内容》 if (Convert.IsDBNull(reader.GetString(2))) { 二次加工[cLoop] = ""; } else { 二次加工[cLoop] = reader.GetString(2); } 教えて下さい。