|
■No62364 (裕猫 さん) に返信
裕猫 さん
回答ありがとうございます。
>>『3番目のカラムのデータを読むのにはdr[2].tostring()でテキストに変換すれば確認できますよ。』 >>で、混乱してしまいました。 >>ここでの例は、テーブル全データ取得した時の場合は『dr[2].tostring()』になるのでよろしいのでしょうか? >> > messageboxエラーに関してはshuさんにフォローしていただいたので疑問点の回答です。 > テーブルにはデータが何個か存在します。たとえば5個のデータを持っていてデータ1、データ2、データ3、データ4、データ5としましょう。 > dr[0]=データ1 > dr[1]=データ2 > dr[2]=データ3 > dr[3]=データ4 > dr[4]=データ5 > という対応でデータが収納されるという意味です。なので3番目のデータ3の値を見たければdr[2]のデータを指定するということです。ちなみにカラムというのは > データ1、データ2などのデータをさす言葉です。外部でデータを参照するためにはdrを別のオブジェクトの配列にコピーして使えばいいです。
ありがとうございます。 外部でデータを参照するためには、配列にコピーすれば良いのはわかりました。
私の思い込みで、混乱していたようです。
『3番目のデータ3の値を見たければdr[2]』 ってことで、 結果は、 1003,チョコ [2]ってことは3行目??? って思いこんでいました。
messageboxをusingの範囲内に移動して 実行したら 「無効な列索引が指定されました。」 になってしまいました。
MessageBox.Show(Convert.ToString(dr[2])); を MessageBox.Show(Convert.ToString(dr[0])); 表示内容:1003 or MessageBox.Show(Convert.ToString(dr[1])); 表示内容:チョコ に変更して実行して 原因が判明しました。
ありがとうございます。
結果が複数件の時はどうなるんだろう? と疑問に思い。 ---------------------------------------- 学生番号,氏名,性別,国語,算数,理科,社会 3001,井上,男,80,90,50,70 3002,山田,女,70,60,100,50 3003,佐藤,男,60,80,60,100 3004,鈴木,女,90,70,90,80 3005,田中,男,100,50,70,60 3006,木村,女,50,100,80,90 ----------------------------------------
string cmdstr = "SELECT * FROM GAKU_T WHERE 国語 >= 80"; OracleConnection connection = new OracleConnection(constr); OracleCommand cmd = new OracleCommand(cmdstr, con);
using (OracleDataReader dr = cmd.ExecuteReader()) { dr.Read();
MessageBox.Show(Convert.ToString(dr[0])); } で実行すると MessageBoxの行で 「オブジェクトの現在の状態に問題があるため、操作は有効でありません。」 になってしまいました。
結果が複数件の場合は 2次元配列になると思い MessageBox.Show(Convert.ToString(dr[0][0])); したら、 「角かっこ[]付きインデックスを'object'型の式に適用することはできません。」 になりました。
結果が複数件の時は別の方法になるのでしょうか?
|