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

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

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

Re[4]: クエリビルダで列名を変数にしたいが


(過去ログ 109 を表示中)

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

■64556 / inTopicNo.1)  クエリビルダで列名を変数にしたいが
  
□投稿者/ shito (1回)-(2012/12/06(Thu) 21:46:12)

分類:[ASP.NET (C#)] 

VisualStudio2010でwebアプリを作成しています。
クエリビルダでSQL文を作成しSQLサーバにアクセスしています。
このSQL文でわからない点があります。
列1、列2、列3のフィールドを持つテーブルがあるとします。
ドロップダウンリストで選択した項目により、ある時は列1だけ取得し
ある時は列2だけ取得し、ある時は列3だけ取得する様なSQL文を作りたいのですが、どうすればよいかわかりません、列名を変数にできればよさそうなんですが、そんなことできますか?
ある時は
SELECT 列1 FROM table1
ある時は
SELECT 列2 FROM table1
ある時は
SELECT 列3 FROM table1
としたいので
  SELECT @列名 FROM table
@列名は変数のつもりです。
このようにできればよいと思っていますが・・・
よろしくおねがいします
引用返信 編集キー/
■64559 / inTopicNo.2)  Re[1]: クエリビルダで列名を変数にしたいが
□投稿者/ 魔界の仮面弁士 (106回)-(2012/12/07(Fri) 09:26:44)
No64556 (shito さん) に返信
> 列名を変数にできればよさそうなんですが、そんなことできますか?
値をパラメータにすることはできますが、テーブルや列名などをパラメータ化することは
できないはずです。

なお、
 SELECT
  CASE パラメータ
   WHEN 10 THEN 列1
   WHEN 20 THEN 列2
   WHEN 30 THEN 列3
  END AS 列0
 FROM
  Table1
あるいは、
 SELECT 列1 FROM Table1 WHERE パラメータ=10
 UNION ALL
 SELECT 列2 FROM Table1 WHERE パラメータ=20
 UNION ALL
 SELECT 列3 FROM Table1 WHERE パラメータ=30
のような形にすれば、それに近い結果は得られるかもしれません。

ただし、各列のデータ型が一致していることが条件となりますが。
引用返信 編集キー/
■64561 / inTopicNo.3)  Re[2]: クエリビルダで列名を変数にしたいが
□投稿者/ shito (2回)-(2012/12/07(Fri) 11:09:55)
No64559 (魔界の仮面弁士 さん) に返信
回答ありがとうございます。
列名はパラメータにできないのですね。ざんねんです。
パラメータは全部で300種類くらいになる予定なので、
CASE
  WHEN
  WHEN
を300行記述することになりますね。
これで求めたい結果は得ることができますが
もっとスマートな方法はないですか?
よろしくお願いします

引用返信 編集キー/
■64566 / inTopicNo.4)  Re[3]: クエリビルダで列名を変数にしたいが
□投稿者/ pang2 (8回)-(2012/12/07(Fri) 13:52:40)
クエリビルダでやるのは無理があるでしょう。
単純な方法としては、文字列でSQL文を生成してSqlDataAdapterと生DataSetで。

string sql = "SELECT " + this.DropDownList1.SelectedValue + " FROM table1";

データセットを使ったデータベース・アクセス
http://www.atmarkit.co.jp/fdotnet/basics/adonet04/adonet04_02.html
引用返信 編集キー/
■64569 / inTopicNo.5)  Re[4]: クエリビルダで列名を変数にしたいが
□投稿者/ 774RR (32回)-(2012/12/07(Fri) 16:01:02)
そして SQL インジェクション脆弱性を作りこむわけですね、わかります。
引用返信 編集キー/
■64587 / inTopicNo.6)  Re[5]: クエリビルダで列名を変数にしたいが
□投稿者/ daive (2回)-(2012/12/09(Sun) 10:21:39)
>を300行記述することになりますね。
>これで求めたい結果は得ることができますが
>もっとスマートな方法はないですか?
私なら、普通に、ストアドの使用を考えますが、
ストアドプロシージャの、使用は不可なのでしょうか?
引用返信 編集キー/
■64658 / inTopicNo.7)  Re[4]: クエリビルダで列名を変数にしたいが
□投稿者/ shito (3回)-(2012/12/14(Fri) 09:08:30)
No64566 (pang2 さん) に返信
> クエリビルダでやるのは無理があるでしょう。
> 単純な方法としては、文字列でSQL文を生成してSqlDataAdapterと生DataSetで。
>
> string sql = "SELECT " + this.DropDownList1.SelectedValue + " FROM table1";
>
> データセットを使ったデータベース・アクセス
> http://www.atmarkit.co.jp/fdotnet/basics/adonet04/adonet04_02.html

返信おそくなりまして申し訳ありません。
この方法ならわりと簡単にできそうです。
ありがとうございました。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -