アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えて下さい。

以下のように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();

A 回答 (1件)

http://msdn.microsoft.com/en-us/library/system.d …

>Conversions are performed based on the underlying capabilities of the ODBC driver. >If the conversion is not supported, the method call fails.
>Call IsDBNull to look for null values before calling this method.
このメソッドを呼ぶ前に、IsDBNullメソッドを呼んでnull値かどうか確認しろ、ってリファレンスに書いてある

#そして、必要があれば分岐するコードを自分でかけ、ってことだと思う
「データ取得時のエラーに関して」の回答画像1

この回答への補足

ご回答ありがとうございます。

教えて頂いたように、IsDBNull関数を使用し、以下のように記述しましたが、
それでもエラーが消えません。。。

エラーの内容は同じです。

何が原因でしょうか???

《記述内容》

if (Convert.IsDBNull(reader.GetString(2)))
{
二次加工[cLoop] = "";
}
else
{
二次加工[cLoop] = reader.GetString(2);
}

教えて下さい。

補足日時:2011/05/24 10:48
    • good
    • 0
この回答へのお礼

ありがとうございました。

教えて頂いた内容をヒントにようなく解決しました。

ありがとうございました!!

お礼日時:2011/05/25 09:18

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