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

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

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

Re[14]: C# で Oracle SELECT


(過去ログ 105 を表示中)

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

■62317 / inTopicNo.1)  C# で Oracle SELECT
  
□投稿者/ 由紀 (1回)-(2011/10/03(Mon) 15:08:33)

分類:[C#] 

「C#」「Oracle」の勉強を始めたばかりの初心者です。

「C#」から「Oracle」への接続は「ODE.NET」を利用するのがわかり、
サンプルソースを参考に「Oracle」への接続、切断は正常に出来るようになりました。

「Oracle」で
テーブル名「abc_t」に以下のデータが格納されている時に
---------------
商品番号,商品名
1001,あめ
1002,ガム
1003,チョコ
1004,クッキー
1005,ポッキー
---------------

「Common SQL Environment」で以下を実行すると
-------------------------
SELECT *
FROM abc_t
WHERE 商品名 = 'チョコ'
-------------------------
結果が
-------------------------
1003,チョコ
-------------------------
と表示されます。

「C#」で
-------------------------
SELECT *
FROM abc_t
WHERE 商品名 = 'チョコ'
-------------------------
を実行して
結果の表示するには
どのように記述すれば良いのでしょうか?

教えてください。
お願いします。

引用返信 編集キー/
■62319 / inTopicNo.2)  Re[1]: C# で Oracle SELECT
□投稿者/ shu (1026回)-(2011/10/03(Mon) 16:16:40)
No62317 (由紀 さん) に返信
> 「C#」「Oracle」の勉強を始めたばかりの初心者です。
>
> 「C#」から「Oracle」への接続は「ODE.NET」を利用するのがわかり、
> サンプルソースを参考に「Oracle」への接続、切断は正常に出来るようになりました。
ODE.NETはサーバー側の機能を拡張するためのものでクラインとからのアクセスには
ODP.NETかと思います。

OracleConnectionで接続し
OracleDataReaderまたはOracleDataAdapterで読むと良いと思います。
DataSetとかDataTableにデータを格納する必要がなければReaderの方を使うとよいです。
引用返信 編集キー/
■62327 / inTopicNo.3)  Re[2]: C# で Oracle SELECT
□投稿者/ 由紀 (3回)-(2011/10/03(Mon) 18:02:01)
shuさん
回答ありがとうございます。


> ODE.NETはサーバー側の機能を拡張するためのものでクラインとからのアクセスには
> ODP.NETかと思います。

「ODP.NET」でした。
すみません。


> OracleConnectionで接続し
> OracleDataReaderまたはOracleDataAdapterで読むと良いと思います。
> DataSetとかDataTableにデータを格納する必要がなければReaderの方を使うとよいです。

「OracleDataReader」か「OracleDataAdapter」ですか。

「OracleDataReader」を調べましたがど
私にはどのように記述すれば良いのかわかりませんでした。

-------------------------
SELECT *
FROM abc_t
WHERE 商品名 = 'チョコ'
-------------------------
を「OracleDataReader」を利用して記述するとどうなるのでしょうか?

わかる方いらっしゃいましたら教えてください。
お願いします。

引用返信 編集キー/
■62335 / inTopicNo.4)  Re[3]: C# で Oracle SELECT
□投稿者/ 裕猫 (258回)-(2011/10/04(Tue) 08:15:28)
No62327 (由紀 さん) に返信
> 「OracleDataReader」を調べましたがど
> 私にはどのように記述すれば良いのかわかりませんでした。
>
> -------------------------
> SELECT *
> FROM abc_t
> WHERE 商品名 = 'チョコ'
> -------------------------
> を「OracleDataReader」を利用して記述するとどうなるのでしょうか?
>
> わかる方いらっしゃいましたら教えてください。
> お願いします。
>
using (OracleDataReader dr = cmd.ExecuteReader())
{
dr.Read();
}
これでdrというobjectの配列に各カラムのデータを保存します。
3番目のカラムのデータを読むのにはdr[2].tostring()でテキストに変換すれば確認できますよ。
引用返信 編集キー/
■62336 / inTopicNo.5)  Re[4]: C# で Oracle SELECT
□投稿者/ 由紀 (4回)-(2011/10/04(Tue) 09:59:24)
裕猫さん
回答ありがとうございます。


> using (OracleDataReader dr = cmd.ExecuteReader())
> {
> dr.Read();
> }
> これでdrというobjectの配列に各カラムのデータを保存します。
> 3番目のカラムのデータを読むのにはdr[2].tostring()でテキストに変換すれば確認できますよ。

すみません。
私の知識では、理解が出来ません・・・
(初歩的な事が何もわかっていません。)

dr
cmd
の作成が必要になのですよね?
どのように記述すれば良いのかわからないレベルです。

前後に宣言しなくてはいけないことがあると思います。
そういうのが、まったくわからないレベルです。

テーブル名の指定必要無いのか?
SQL文はどうなるのでしょう?


C#でSQL文は発行出来ない?
デーブルのデータを取得して
C#で、文字列を一致するか比較することになるのでしょうか?
そんなことはありませんよね?


教えてください。
お願いします。

引用返信 編集キー/
■62337 / inTopicNo.6)  Re[5]: C# で Oracle SELECT
□投稿者/ shu (1029回)-(2011/10/04(Tue) 10:13:00)
2011/10/04(Tue) 10:16:20 編集(投稿者)

No62336 (由紀 さん) に返信

Google検索:ODP OracleDataReader
=> http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/win.111/E05791-01/OracleDataReaderClass.htm#i1003252
など。

こちらにはOracle環境ありません。
引用返信 編集キー/
■62339 / inTopicNo.7)  Re[6]: C# で Oracle SELECT
□投稿者/ 柳川 (1回)-(2011/10/04(Tue) 11:33:44)
こんなに酷い丸投げは久しぶりに見ました。
引用返信 編集キー/
■62341 / inTopicNo.8)  Re[6]: C# で Oracle SELECT
□投稿者/ 由紀 (5回)-(2011/10/04(Tue) 13:17:14)
shuさん
回答ありがとうございます。

> Google検索:ODP OracleDataReader
> => http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/win.111/E05791-01/OracleDataReaderClass.htm#i1003252
> など。
>
> こちらにはOracle環境ありません。

Oracle Data Provider for .NET開発者ガイド
など、色々見たけど
私にはどうしたら良いのかわかりませんでした・・・

Oracle環境が無いなか
わかる範囲で回答していただき
ありがとうございました。

引用返信 編集キー/
■62342 / inTopicNo.9)  Re[7]: C# で Oracle SELECT
□投稿者/ 由紀 (6回)-(2011/10/04(Tue) 13:20:19)
No62339 (柳川 さん) に返信
> こんなに酷い丸投げは久しぶりに見ました。

柳川さん

色々見てわからなかったので
こちらの掲示板を頼りました。

超初心者でもわかる参照先など
知っていましたら
アドバイスお願い致します。


引用返信 編集キー/
■62343 / inTopicNo.10)  Re[8]: C# で Oracle SELECT
□投稿者/ ゼロワン (1回)-(2011/10/04(Tue) 13:39:26)
2011/10/04(Tue) 16:44:04 編集(投稿者)

No62342 (由紀 さん) に返信

> 超初心者でもわかる参照先など
> 知っていましたら

貴方がやりたいことを実現するには、それなりの知識が必要です。

> => http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/win.111/E05791-01/OracleDataReaderClass.htm#i1003252
> など。

には、ぴったりのサンプルが記載されているのですが、この内容が理解できなければ、難しそうですね。
ただ、上のサイトを読みながら、自分の中で理解できるところ、推測できるところ、全く分からないところがあるはずです。
それを貴方自身で整理して、分からない点、または推測の域を出ない点についてまた質問すればいいのではないでしょうか?
SQL文はある程度理解されているようですので、地道にやっていきましょう。
引用返信 編集キー/
■62357 / inTopicNo.11)  Re[5]: C# で Oracle SELECT
□投稿者/ 裕猫 (259回)-(2011/10/05(Wed) 08:59:40)
No62336 (由紀 さん) に返信
>>using (OracleDataReader dr = cmd.ExecuteReader())
>>{
>> dr.Read();
>>}
>>これでdrというobjectの配列に各カラムのデータを保存します。
>>3番目のカラムのデータを読むのにはdr[2].tostring()でテキストに変換すれば確認できますよ。
>
> すみません。
> 私の知識では、理解が出来ません・・・
> (初歩的な事が何もわかっていません。)
ちょっと質問します。データベースへの接続はできていますか? これはOracleConnectionでデータベースへ接続しOracleCommandで
-------------------------
SELECT *
FROM abc_t
WHERE 商品名 = 'チョコ'
-------------------------
を実行後にそのまま記述すればdrに勝手にデータを読み込んでくれるC#のコマンドです。
C#プログラムでデータの選択までできているという認識で回答したのですが違ってました?
> dr
> cmd
> の作成が必要になのですよね?
using (OracleDataReader dr = cmd.ExecuteReader())でdr作っているでしょ?
cmd はOracleCommandです。
> どのように記述すれば良いのかわからないレベルです。
これを参考に記述してください。
> 前後に宣言しなくてはいけないことがあると思います。
usingの部分が宣言を含んでいます。

> テーブル名の指定必要無いのか?
> SQL文はどうなるのでしょう?
> C#でSQL文は発行出来ない?
できます。OracleCommandのテキストにSQL文を書いて実行させます。
> デーブルのデータを取得して
> C#で、文字列を一致するか比較することになるのでしょうか?
> そんなことはありませんよね?
この文の言わんとすることが理解できないのですがselect文でキー条件の一致するデータ1つしか読み込まないのであなたのSQL文を見る限りチョコというデータを1つだけ読み込むはずです。なので何の比較をする必要があるのかわかりません。 もしかしてチョコはいくつもデータがあるのですか?ならばテーブルの中で最初に見つけたチョコのデータを一つだけ読んでいます。

引用返信 編集キー/
■62358 / inTopicNo.12)  Re[6]: C# で Oracle SELECT
□投稿者/ ゼロワン (2回)-(2011/10/05(Wed) 10:49:04)
No62357 (裕猫 さん) に返信

おそらく、質問者はあなたの書き込みを半分以上理解できないと思います。
No62336の返事を見る限り、どうやってSQL文を投げればいいかも理解できていないことが推測できます。

> Oracle Data Provider for .NET開発者ガイド
> など、色々見たけど
> 私にはどうしたら良いのかわかりませんでした・・・

ある程度.netを使ったことのある人であれば、Oracleを使ったことがなくても各クラスをひとつずつ調べて
理解できるでしょうが、試行錯誤をしてでもこれをある程度理解できなければ、いきなりこれを習得するのは
厳しいと思いますので、ここはある程度の利用者の努力を待つしかないのではないでしょうか。
そうしないと、回答者も何を答えればいいか分からなくなりますから。
引用返信 編集キー/
■62359 / inTopicNo.13)  Re[9]: C# で Oracle SELECT
□投稿者/ 由紀 (7回)-(2011/10/05(Wed) 11:37:40)
No62343 (ゼロワン さん) に返信
> 2011/10/04(Tue) 16:44:04 編集(投稿者)

ゼロワン さん

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


>>超初心者でもわかる参照先など
>>知っていましたら
>
> 貴方がやりたいことを実現するには、それなりの知識が必要です。

知識が必要なのですね・・・


>>=> http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/win.111/E05791-01/OracleDataReaderClass.htm#i1003252
>>など。
>
> には、ぴったりのサンプルが記載されているのですが、この内容が理解できなければ、難しそうですね。
> ただ、上のサイトを読みながら、自分の中で理解できるところ、推測できるところ、全く分からないところがあるはずです。
> それを貴方自身で整理して、分からない点、または推測の域を出ない点についてまた質問すればいいのではないでしょうか?
> SQL文はある程度理解されているようですので、地道にやっていきましょう。

サンプルですが、
現時点で、接続と切断部分はわかるのですが、
間が何をしているのか理解出来ていない状態です。
私なりに理解したいと思います。
わからなかったら、質問させてもらいます。

引用返信 編集キー/
■62360 / inTopicNo.14)  Re[6]: C# で Oracle SELECT
□投稿者/ 由紀 (8回)-(2011/10/05(Wed) 11:43:04)
No62357 (裕猫 さん) に返信

裕猫 さん

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


> >>using (OracleDataReader dr = cmd.ExecuteReader())
> >>{
> >> dr.Read();
> >>}
> >>これでdrというobjectの配列に各カラムのデータを保存します。
> >>3番目のカラムのデータを読むのにはdr[2].tostring()でテキストに変換すれば確認できますよ。
>>
>>すみません。
>>私の知識では、理解が出来ません・・・
>>(初歩的な事が何もわかっていません。)
> ちょっと質問します。データベースへの接続はできていますか? これはOracleConnectionでデータベースへ接続しOracleCommandで
> -------------------------
> SELECT *
> FROM abc_t
> WHERE 商品名 = 'チョコ'
> -------------------------
> を実行後にそのまま記述すればdrに勝手にデータを読み込んでくれるC#のコマンドです。
> C#プログラムでデータの選択までできているという認識で回答したのですが違ってました?
>>dr
>>cmd
>>の作成が必要になのですよね?
> using (OracleDataReader dr = cmd.ExecuteReader())でdr作っているでしょ?
> cmd はOracleCommandです。
>>どのように記述すれば良いのかわからないレベルです。
> これを参考に記述してください。
>>前後に宣言しなくてはいけないことがあると思います。
> usingの部分が宣言を含んでいます。


データベースへの接続は出来ていると思います。

------------------------------------------------------------
string constr = "User Id=aaa;Password=bbb;Data Source=ccc";
OracleConnection con = new OracleConnection(constr);
con.Open();

string cmdstr = "SELECT * FROM ABC_T";
OracleConnection connection = new OracleConnection(constr);
OracleCommand cmd = new OracleCommand(cmdstr, con);

using (OracleDataReader dr = cmd.ExecuteReader())
{
dr.Read();
}

MessageBox.Show(Convert.ToString(dr[2]));

con.Close();
con.Dispose();
------------------------------------------------------------

実行するとエラーになります。
名前'dr'は現在のコンテキスト内に存在しません。(MessageBoxの行)


『データを読むのにはdr[2].tostring()でテキストに変換すれば確認できますよ。』
とアドバイスしてもらえたので
MessageBoxに表示しようとしました。


>>テーブル名の指定必要無いのか?
>>SQL文はどうなるのでしょう?
>>C#でSQL文は発行出来ない?
> できます。OracleCommandのテキストにSQL文を書いて実行させます。

ありがとうございます。
サンプルなど、色々見て
OracleCommandに渡してあげれば良いと理解しています。


>>デーブルのデータを取得して
>>C#で、文字列を一致するか比較することになるのでしょうか?
>>そんなことはありませんよね?
> この文の言わんとすることが理解できないのですがselect文でキー条件の一致するデータ1つしか読み込まないのであなたのSQL文を見る限りチョコというデータを1つだけ読み込むはずです。なので何の比較をする必要があるのかわかりません。 もしかしてチョコはいくつもデータがあるのですか?ならばテーブルの中で最初に見つけたチョコのデータを一つだけ読んでいます。

すみません。
説明が悪かったみたいです。


『3番目のカラムのデータを読むのにはdr[2].tostring()でテキストに変換すれば確認できますよ。』
で、混乱してしまいました。
ここでの例は、テーブル全データ取得した時の場合は『dr[2].tostring()』になるのでよろしいのでしょうか?

引用返信 編集キー/
■62361 / inTopicNo.15)  Re[7]: C# で Oracle SELECT
□投稿者/ shu (1032回)-(2011/10/05(Wed) 12:00:44)
No62360 (由紀 さん) に返信

> using (OracleDataReader dr = cmd.ExecuteReader())
> {
> dr.Read();
> }
>
> MessageBox.Show(Convert.ToString(dr[2]));
>
> con.Close();
> con.Dispose();
> ------------------------------------------------------------
>
> 実行するとエラーになります。
> 名前'dr'は現在のコンテキスト内に存在しません。(MessageBoxの行)

drはusingの範囲内でのみ有効となるのでusingの外で値を参照しても駄目です。
using 〜
{
dr.Read();
<< ここで値を取得する必要があります。 >>
}
<< ここでdrにアクセスしたためエラー発生 >>


引用返信 編集キー/
■62364 / inTopicNo.16)  Re[7]: C# で Oracle SELECT
□投稿者/ 裕猫 (260回)-(2011/10/05(Wed) 12:59:10)
No62360 (由紀 さん) に返信
> 『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を別のオブジェクトの配列にコピーして使えばいいです。
引用返信 編集キー/
■62367 / inTopicNo.17)  Re[8]: C# で Oracle SELECT
□投稿者/ ゼロワン (3回)-(2011/10/05(Wed) 15:27:48)
No62364 (裕猫 さん) に返信

> テーブルにはデータが何個か存在します。たとえば5個のデータを持っていてデータ1、データ2、データ3、データ4、データ5としましょう。

おそらく、ここでいう「データ」とはカラム、すなわち列の項目のことを説明しているのだと思いますが、
データベースを少しでも知っている人がこの表現を見ると、普通、列の項目ではなく、行データのことと
勘違いしてしまわないでしょうか。
(質問者はSQLについては少し知っているようですので。)
引用返信 編集キー/
■62369 / inTopicNo.18)  Re[8]: C# で Oracle SELECT
□投稿者/ 由紀 (9回)-(2011/10/05(Wed) 17:20:18)
No62361 (shu さん) に返信

shu さん

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


> drはusingの範囲内でのみ有効となるのでusingの外で値を参照しても駄目です。
> using 〜
> {
> dr.Read();
> << ここで値を取得する必要があります。 >>
> }
> << ここでdrにアクセスしたためエラー発生 >>


usingの範囲内のみ有効なんですね。
カッコ内に移動したら
エラーなくなりました。

ありがとうございます。

引用返信 編集キー/
■62371 / inTopicNo.19)  Re[9]: C# で Oracle SELECT
□投稿者/ 由紀 (10回)-(2011/10/05(Wed) 17:21:22)
No62367 (ゼロワン さん) に返信

ゼロワン さん

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


>>テーブルにはデータが何個か存在します。たとえば5個のデータを持っていてデータ1、データ2、データ3、データ4、データ5としましょう。
>
> おそらく、ここでいう「データ」とはカラム、すなわち列の項目のことを説明しているのだと思いますが、
> データベースを少しでも知っている人がこの表現を見ると、普通、列の項目ではなく、行データのことと
> 勘違いしてしまわないでしょうか。

行と誤解をしていました。


> (質問者はSQLについては少し知っているようですので。)

SQLも、まだまだ、わからない状態です・・・

引用返信 編集キー/
■62372 / inTopicNo.20)  Re[8]: C# で Oracle SELECT
 
□投稿者/ 由紀 (11回)-(2011/10/05(Wed) 17:22:41)
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'型の式に適用することはできません。」
になりました。

結果が複数件の時は別の方法になるのでしょうか?

引用返信 編集キー/

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

管理者用

- Child Tree -