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

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

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

Re[2]: DataReaderのItemプロパティについて


(過去ログ 70 を表示中)

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

■40887 / inTopicNo.1)  DataReaderのItemプロパティについて
  
□投稿者/ まるもじゃ (1回)-(2009/09/05(Sat) 15:27:46)

分類:[.NET 全般] 

VB2008 Ver9.0 、.NET Framework VEr3.5 SP1を使用しています。

ADO.NETのDataReaderを使用し、ODBC経由でSQLを発行した結果より
Itemプロパティに相対位置ではなく項目名を指定し、値を取得したいのですが、
SELECT句に異なるテーブルの同一の項目が存在する場合の取得方法がわかりません。

発行するSQL文の例は以下のとおりです。
<SQL文>
select Aテーブル.C項目,Bテーブル.C項目 from Aテーブル,Bテーブル


実際のコードは以下のように作成し、
コンパイルエラーは発生せず、処理も実行されましたが、
取得された値は両方とも「Aテーブル.C項目」でした。

<コード>
変数A = dr.Item("C項目")
変数B = dr.Item("C項目")


ちなみに、
変数A = dr.Item("Aテーブル.C項目")
変数B = dr.Item("Bテーブル.C項目")

とした場合はコンパイルエラーにはならず、
実行時にエラーロジックに飛んでしまいました。
また、GetName メソッドを使用して項目名を確認した結果、
dr.GetName(0)とdr.GetName(1)は同じ「C項目」でした。


SQLのSELECT句の項目名を修正する方法も考えられますが、
実行実績のあるSQLであるということと、修正範囲が広く、
多大な修正作業が発生するということから、
極力修正は避けたいと考えております。


お忙しいところ申し訳ありませんが
どなたかご教授いただきますよう、よろしくお願いいたします。

引用返信 編集キー/
■40891 / inTopicNo.2)  Re[1]: DataReaderのItemプロパティについて
□投稿者/ もりお (66回)-(2009/09/05(Sat) 17:14:59)
No40887 (まるもじゃ さん) に返信
> ADO.NETのDataReaderを使用し、ODBC経由でSQLを発行した結果より
> Itemプロパティに相対位置ではなく項目名を指定し、値を取得したいのですが、
> SELECT句に異なるテーブルの同一の項目が存在する場合の取得方法がわかりません。

私も調べてみたのですがわかりませんでした。


> SQLのSELECT句の項目名を修正する方法も考えられますが、
> 実行実績のあるSQLであるということと、修正範囲が広く、
> 多大な修正作業が発生するということから、
> 極力修正は避けたいと考えております。

SQL の修正が難しいとなると列の序数が変わることもあまり無いのではないでしょうか。
そうすると序数でアクセスするのも悪くないような気がします。
Dim AテーブルC項目 As Integer = 0
Dim BテーブルC項目 As Integer = 1
このように変数に代入することでコードの可読性は確保できますし
列名から序数への変換が無いので、列名でアクセスするよりも
おそらく高速に動作します。



引用返信 編集キー/
■40892 / inTopicNo.3)  Re[2]: DataReaderのItemプロパティについて
□投稿者/ まるもじゃ (2回)-(2009/09/05(Sat) 17:34:33)
No40891 (もりお さん) に返信

もりお様

ご返信ありがとうございます!

> 私も調べてみたのですがわかりませんでした。

そうですか。。。
お忙しいところお調べいただきありがとうございました。

> Dim AテーブルC項目 As Integer = 0
> Dim BテーブルC項目 As Integer = 1
> このように変数に代入することでコードの可読性は確保できますし
> 列名から序数への変換が無いので、列名でアクセスするよりも
> おそらく高速に動作します。

なるほど!
目からうろこでございます。(思いつきませんでした・・・)

今回の件は「こういう仕様」と割り切り、
もりおさまにアドバイスいただいたように
ソースの修正をしたいと思います。

この度は本当にありがとうございました。











解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

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

管理者用

- Child Tree -