C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[14]: C# で Oracle SELECT [1]


(過去ログ 105 を表示中)

[トピック内 29 記事 (21 - 29 表示)]  << 0 | 1 >>

■62373 / inTopicNo.21)  Re[9]: C# で Oracle SELECT
  
□投稿者/ shu (1033回)-(2011/10/05(Wed) 17:57:47)
No62372 (由紀 さん) に返信

先に提示したリンク先の
// C#
以下の部分をよく見ることを薦めます。

> 「オブジェクトの現在の状態に問題があるため、操作は有効でありません。」
dr.Close()せずに継続してDataReaderを開こうとしてますか?

引用返信 編集キー/
■62374 / inTopicNo.22)  Re[9]: C# で Oracle SELECT
□投稿者/ くだん (10回)-(2011/10/05(Wed) 18:04:39)
2011/10/05(Wed) 19:04:48 編集(投稿者)

No62372 (由紀 さん) に返信
私が ODP.NET(Oracle社が作ったもの) やったときは、ADO.NET(Microsoft社が作ったもの)を散々やり倒した
後だったから、構造が同じだと分かったらほとんどマニュアル見ないで作っちゃったけど、マニュアルに
チュートリアルとかサンプルコードとか載ってないのかな。
「新しいエアコンを買って操作が分からないなら操作説明書を読む」レベルの作業をせずに、勝手な解釈で
「初心者だから仕方ない」なんてとんでもないよ。そんな人にプログラムなんて端から出来ないよ。
なんのひねりも無く、データ検索の為のクラスの、データを検索する使い方なんて、調べたけど分からない
なんてレベルの話じゃないと思うけどな。マニュアル通りの手順を書いて終わりだよ。

ADO.NET基礎講座
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html
設計思想は Microsoft 社が作ったものがベースで、構造を真似てありますので、手順は同様になります。
ADO.NET にも OracleClient という Oracle 接続用のクラスも用意されています。
http://msdn.microsoft.com/ja-jp/library/system.data.oracleclient(v=VS.100).aspx

データの読み込み方に大きく2種類あって、
・全データを一気に取得する DataAdapter.Fill
検索項目が全て入れ物に入れられ、入れ物は2次元構造だけど、データ数が多いと丸ごと読み込むまで
次の処理ができないから、画面上のレスポンスが悪いように感じる場合がある。

・取得したデータを先頭行から処理できる DataReader.Read
行単位で処理できるから、最後までデータがサーバから落ちてきてなくても処理できるけど、カレント行を
読み進めていく(後戻りは出来ない)ので、読み込んだデータは何か別の入れ物に入れなおさないと複数の
行のデータを確認する事はできない。

DataReader を使ってるなら、カレント行を確認したいデータの行まで進めてその1行を読む事になります。
そもそも、どんな目的でどう設計されてて、どう使って下さいと書いてある"マニュアルを読んでから"
発言して欲しいです。
引用返信 編集キー/
■62385 / inTopicNo.23)  Re[9]: C# で Oracle SELECT
□投稿者/ 裕猫 (262回)-(2011/10/06(Thu) 08:20:07)
No62367 (ゼロワン さん) に返信
> おそらく、ここでいう「データ」とはカラム、すなわち列の項目のことを説明しているのだと思いますが、
> データベースを少しでも知っている人がこの表現を見ると、普通、列の項目ではなく、行データのことと
> 勘違いしてしまわないでしょうか。
> (質問者はSQLについては少し知っているようですので。)
おお、言われてみればその通りですね。私も説明はまだまだだなあといい教訓になりました。ご指摘ありがとうございます。もっと正確に伝えられるように心がけます。
引用返信 編集キー/
■62386 / inTopicNo.24)  Re[9]: C# で Oracle SELECT
□投稿者/ 裕猫 (263回)-(2011/10/06(Thu) 08:46:55)
No62372 (由紀 さん) に返信
> 私の思い込みで、混乱していたようです。
>
> 『3番目のデータ3の値を見たければdr[2]』
> ってことで、
> 結果は、
> 1003,チョコ
> [2]ってことは3行目???
> って思いこんでいました。
説明が下手で誤解させて申し訳ありませんでした。理解できたようでよかったです。

> 結果が複数件の時はどうなるんだろう?
> と疑問に思い。
> ----------------------------------------
> 学生番号,氏名,性別,国語,算数,理科,社会
> 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'型の式に適用することはできません。」
> になりました。
>
> 結果が複数件の時は別の方法になるのでしょうか?
>
エラーの内容からするとデータを見つけられていません。国語はキーに設定されていますか?キーになっていないので捜せなくてそのエラーを出しているものと推測いたします。
それから私のサンプルはデータを1行だけ読むものです。全データを読むためのサンプルはshuさんの教えてくれたURLにそのものズバリがありますので、そちらを参考にしてください。
引用返信 編集キー/
■62396 / inTopicNo.25)  Re[10]: C# で Oracle SELECT
□投稿者/ 裕猫 (264回)-(2011/10/07(Fri) 08:26:12)
すみません。サンプルはshuさんではなくゼロワンさんのでした。訂正とお詫びを申し上げます。すみませんでした。
引用返信 編集キー/
■62406 / inTopicNo.26)  Re[11]: C# で Oracle SELECT
□投稿者/ ゼロワン (6回)-(2011/10/07(Fri) 13:51:52)
No62396 (裕猫 さん) に返信
> すみません。サンプルはshuさんではなくゼロワンさんのでした。訂正とお詫びを申し上げます。すみませんでした。

いえいえ、サンプルのURLは元々shuさんが提示したもので、私はそれを引用しただけですので、
訂正もお詫びも不要ですよ ノシ
引用返信 編集キー/
■62522 / inTopicNo.27)  Re[12]: C# で Oracle SELECT
□投稿者/ 由紀 (12回)-(2011/10/17(Mon) 10:26:04)
みなさん
回答ありがとうございます。


サンプル
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/win.111/E05791-01/OracleDataReaderClass.htm#i1003252

理解がなんとかできました。(本当に理解出来ているかは不明・・・)


理解後、
gaku_no = reader.GetInt16(0);
だと、「指定されたキャストは有効でありません。」になってしまい困っていましたが
gaku_no = Convert.ToInt16(reader[0]);
に変更したら、エラーにならなくなりました。


結果を(SELECT結果が複数件)2次元配列に格納することが出来ました。

新たな問題
結果が1件の時は「textBox」に格納して表示していました。
結果が複数件(条件によって件数が変動)
の時の画面の表示方法をどうしたら良いのかがわかりません。

アドバイスお願い致します。

引用返信 編集キー/
■62524 / inTopicNo.28)  Re[13]: C# で Oracle SELECT
□投稿者/ ゼロワン (12回)-(2011/10/17(Mon) 10:59:48)
No62522 (由紀 さん) に返信
> 新たな問題
> 結果が1件の時は「textBox」に格納して表示していました。
> 結果が複数件(条件によって件数が変動)
> の時の画面の表示方法をどうしたら良いのかがわかりません。

これは、結果をどのように利用するかにもよります。
WinFormアプリであれば、ListBoxやDataGridViewのようなコントロールを使ったリスト表示が
手軽だと思います。
複数項目を表示したり、内容を編集したりする場合には、私はDataGridViewをよく使います。

検索結果をどのように利用するかを具体的に説明すれば、それに合った表示方法について
具体的なアドバイスがもらえるでしょう。
引用返信 編集キー/
■62525 / inTopicNo.29)  Re[14]: C# で Oracle SELECT
□投稿者/ 由紀 (13回)-(2011/10/17(Mon) 12:03:48)
No62524 (ゼロワン さん) に返信

ゼロワン さん

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


結果を下記のように表示したいです。

学生番号 氏名 性別 国語 算数 理科 社会
3001 井上 男 80 90 50 70
3004 鈴木 女 90 70 90 80
3005 田中 男 100 50 70 60

DataGridViewを調べます。
わからなかったり、いき詰ったら
質問させてもらいます。

引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -