- PR -

DataReaderでフィールドの見分け方

1
投稿者投稿内容
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2005-06-20 16:49
@テーブルが2つ存在します。

テーブル: A テーブル: B
フィールド: id, nameA フィールド: id, nameB

AC#で次のように書きました。

SqlConnection con = new SqlConnection();
SqlCommand cmd;
SqlDataReader dr;
string ID;

con.Open();
cmd.CommandText = "select A.*, B.* from A " +
"left outer join B on A.id = B.id";
dr = cmd.ExecuteReader();
if(dr.Read() == true){
ID = dr["B.id"].toString(); /* これだとエラー */
}
dr.Close();
con.Close();

Bデータが存在する場合に変数IDにBテーブルのidを入れたいのですが
工夫次第でできるのでしょうか?
例ではフィールド数が少ないですが、多い場合select文に一つずつ記述するのが
大変なので・・・。
AとBのフィールド名が被って無ければ解決する問題なんですけど。
分かる方がいらしたら伝授していただけ無いでしょうか?
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-06-20 17:07
SQL文を以下のように変更してみてはどうでしょうか。

select A.id as idA,A.nameA as nameA, B.id as idB ,B.nameB as nameB from A left outer join B on A.id = B.id

上記のようにすれば
ID = dr["idB"].toString();
これで出来ると思います。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-06-20 17:13
引用:

KUMAさんの書き込み (2005-06-20 16:49) より:
例ではフィールド数が少ないですが、多い場合select文に一つずつ記述するのが
大変なので・・・。
AとBのフィールド名が被って無ければ解決する問題なんですけど。
分かる方がいらしたら伝授していただけ無いでしょうか?



そういった、目先のめんどくささを解消するよりも、長い目で見ためんどくささを解消するようにした方が良いですよ。
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2005-06-20 17:38
わくさん、こんな面倒くさがり屋にレスを下さってありがとうございます。
名前で強調してとりたいなら as ですし、".*"でも順番が分かれば番号を書けば
いいですしね。

NAL-6295さんの言葉身に染みました。
でも今まで疑問に思ってたことなのですっきりしました。

・・・これからはプログラムで苦労しよう^^
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-06-20 17:47
>名前で強調してとりたいなら as ですし、".*"でも順番が分かれば番号を書けば
いいですしね。

番号では、とらない方がいいと思いますよ。
番号でとっていたら後で修正する人が困ります。

なるべく名前でとった方がいいと思います。
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2005-06-20 17:52
確かに名前で書いた方が確認がしやすいですよね。
一つ聞きたいのですが、
名前より番号の方が処理が早いと聞いています。

処理スピードよりも後々の修正の方を優先した方がいいでしょうか?
わく
ベテラン
会議室デビュー日: 2004/07/13
投稿数: 60
お住まい・勤務地: 九州
投稿日時: 2005-06-20 18:26
>処理スピードよりも後々の修正の方を優先した方がいいでしょうか?
その場その場で違うと思いますが
自分は、後々の修正を優先した方がいいと思います。
特に今回のような場合は、それほど時間に差が無いと思います。
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2005-06-20 18:30
わかりました。
私もわくさんの意見に賛成なので次からは名前で書くようにします。
勉強になりました!
1

スキルアップ/キャリアアップ(JOB@IT)