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

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

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

Re[5]: SQLの実行結果の列名が取得できない


(過去ログ 103 を表示中)

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

■61392 / inTopicNo.1)  SQLの実行結果の列名が取得できない
  
□投稿者/ たけ (7回)-(2011/08/11(Thu) 13:42:28)

分類:[C#] 


SQL Server2005に、System.Data.SqlClientのデータプロバイダにて
接続しています。(環境はVS2010,C#)

DbDataReader reader = cmd.ExecuteReader();
で実行して
reader.GetName(n)で列名を取得しています。 (n)は何列目か

Select
AAA,
BBB
とか、単純なケースはこれで列名が、AAA,BBBと取れますが

Select
LTRIM(AAA)や、COUNT(*)というように関数を使うと

その列のGetName()は、空が返ってきます。

このような場合に、そのままの文字列(上記の場合は、LTRIM(AAA),COUNT(*))
を取得する方法はないでしょうか。

また、Oracle(ODP)で同じコードを実行すると列名を取得することはできています。

引用返信 編集キー/
■61393 / inTopicNo.2)  Re[1]: SQLの実行結果の列名が取得できない
□投稿者/ やじゅ (1944回)-(2011/08/11(Thu) 13:57:44)
やじゅ さんの Web サイト
2011/08/11(Thu) 14:01:53 編集(投稿者)

No61392 (たけ さん) に返信
> Select
> LTRIM(AAA)や、COUNT(*)というように関数を使うと
> その列のGetName()は、空が返ってきます。

エイリアスを付ければ取れませんかね?
Select LTRIM(AAA) AS AAA , COUNT(*) AS BBB

追記:
ごめんなさい、質問の意味を読み違えてました。

引用返信 編集キー/
■61396 / inTopicNo.3)  Re[2]: SQLの実行結果の列名が取得できない
□投稿者/ todo (159回)-(2011/08/11(Thu) 15:00:30)
エイリアスを付るのであれば、

Select LTRIM(AAA) AS 'LTRIM(AAA)' , COUNT(*) AS 'COUNT(*)'
引用返信 編集キー/
■61397 / inTopicNo.4)  Re[1]: SQLの実行結果の列名が取得できない
□投稿者/ shu (936回)-(2011/08/11(Thu) 16:11:13)
No61392 (たけ さん) に返信

列名を取得する目的はなんでしょう?
やじゅさんやtodoさんの示されたようにAlias名を指定したSQL文を
指定すれば列名を取得することは出来ますが、列名を指定しているということは
そもそも列名が分かっていることになるので取得する意味はあまりないかなと思います。

引用返信 編集キー/
■61399 / inTopicNo.5)  Re[2]: SQLの実行結果の列名が取得できない
□投稿者/ くり太郎 (43回)-(2011/08/11(Thu) 16:17:27)
くり太郎 さんの Web サイト
メソッドで取得した結果の値に対して、列名を取得するって逆にどうやってやるのか不思議です。
count(*) って列名との絡みはありませんよね?
引用返信 編集キー/
■61408 / inTopicNo.6)  Re[3]: SQLの実行結果の列名が取得できない
□投稿者/ たけ (8回)-(2011/08/11(Thu) 18:48:49)
>列名を取得する目的はなんでしょう?
すいません、大事なことを書いていませんでした。
列名が取得する目的は、
ユーザーが入力したSQLの実行結果を、DataGridViewに表示する際の列名を表示するためです。

よって、エイリアスをつければ、列名は取れますが
エイリアスをつけるかどうかは、ユーザー次第なので、エイリアスを必ずつけるという手段は使えません。

引用返信 編集キー/
■61409 / inTopicNo.7)  Re[4]: SQLの実行結果の列名が取得できない
□投稿者/ 逆運の覇者 (54回)-(2011/08/11(Thu) 20:05:46)
ユーザーが入力したSQLに対してエイリアスをつけてから
実行するようにすればいいんじゃないですか?
難しくないと思いますが。
引用返信 編集キー/
■61413 / inTopicNo.8)  Re[4]: SQLの実行結果の列名が取得できない
□投稿者/ shu (938回)-(2011/08/11(Thu) 21:18:56)
No61408 (たけ さん) に返信
> >列名を取得する目的はなんでしょう?
> すいません、大事なことを書いていませんでした。
> 列名が取得する目的は、
> ユーザーが入力したSQLの実行結果を、DataGridViewに表示する際の列名を表示するためです。
>
それなら列名が取得できないときは列番号でも表示しとけばいいんじゃないかな?Selectしている内容が
長い式とかだった場合にそれをそのまま列名として表示するのもわかりにくいんじゃないかな。
引用返信 編集キー/
■61414 / inTopicNo.9)  Re[5]: SQLの実行結果の列名が取得できない
□投稿者/ たけ (10回)-(2011/08/11(Thu) 21:47:47)
ユーザーが自由に入力したSQLに対して
Oracleの動きと同様な文字列を取得してエイリアスを設定するのは
、SQLの文字列解析が必要になるかなと。どんなSQLでも対応できるかというと
ちょっと疑問なので、文字列解析してエイリアス設定はやりたくないです。

あくまで、用意されているAPIか、あるいはうまい方法で
Oracleと同様の動きが実現できないかと考えています。

かなりがんばらないと取得ができないと判断できれば、shuさんのおっしゃられている通り
番号をつけてしまおうと思っています。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -