2016-12-08 2 views
0

C#およびasp.netを使用してプロジェクトでユーザー権利管理を実装しようとしています。私がしたいのは、単にログイン名に従って関連するページをユーザーに表示することです。私はたくさんのSQL selectコマンドを書きました。実行時にWHERE部分のSQL selectコマンド演算子を変更します。

SQL選択コマンドでのみWHERE部分を変更する方法はありますか?ユーザーがボタンをクリックしたとき、私は例えば意味

...WHERE REGION='IC'...WHERE REGION<>'IC'

になりそれとも、このようなシナリオを実装するために、他のプラクティスをアドバイスしてくださいすることができますか?事前に

おかげ

編集:私のselectコマンドボタンをユーザーがクリックした後

SELECT * FROM (SELECT Firma,BOLGE,SUM(KDV_MATRAHI) AS TUTAR from SATISLAR_T WHERE DAHIL=0 AND REGION=REGION GROUP BY Firma,BOLGE UNION SELECT Firma,CH_YETKI_KODU AS BOLGE, SUM(KDV_MATRAHI) AS TUTAR 
FROM LNX_STD_6_016_01_SLSINVOICES WHERE MALZEME_OZEL_KODU<>'DİĞER GLR' AND REGION=REGION GROUP BY REGION, Firma) AS BOLGE 
    PIVOT 
(
SUM(TUTAR) 
    FOR Firma IN ([008] ,[009] ,[010] ,[011], [012], [013], [014] ,[015],[016]) 
)AS pvt 

SELECT * FROM (SELECT Firma,BOLGE,SUM(KDV_MATRAHI) AS TUTAR from SATISLAR_T WHERE DAHIL=0 AND REGION='IC' GROUP BY Firma,BOLGE UNION SELECT Firma,CH_YETKI_KODU AS BOLGE, SUM(KDV_MATRAHI) AS TUTAR 
FROM LNX_STD_6_016_01_SLSINVOICES WHERE MALZEME_OZEL_KODU<>'DİĞER GLR' AND REGION<>'IC' GROUP BY CH_YETKI_KODU, Firma) AS BOLGE 
    PIVOT 
(
SUM(TUTAR) 
    FOR Firma IN ([008] ,[009] ,[010] ,[011], [012], [013], [014] ,[015],[016]) 
)AS pvt 
+1

もちろん、WHERE部分を変更することは可能です。実行時にはどういう意味ですか?あなたのコードとあなたの選択を表示してください(あなたがしたいことの役に立つ例を与える)。 – Seb

+0

アドホッククエリまたはストアドプロシージャを使用していますか? –

+0

「実行時」とは、ユーザーがボタンをクリックするとコードがクリックハンドラ内で実行されることを意味します。元の質問にselectを追加しました。 私はストアドプロシージャを使用していません。 –

答えて

0

2を持っているだろうその機能を実装するための明らかな方法さまざまなクエリを関数として使用し、ボタンの状態に応じて適切なものを呼び出します。巧妙なコードやトリックは必要ありません。

+0

実際に私は多くのSQLコマンドと多くのユーザーを持っているので、二重クエリまたは三重クエリを再度書くことを意味します。 –

+0

私はあなたの懸念を理解しています。下のドミトリーの返答は十分な解決策ですが、そのようなコードのメンテナンスが後に問題になる可能性があることに注意してください。 –

+0

他にもこれをお勧めしますか?ちょうどGoogleにそれを私にいくつかの言葉を教えてください。 –

1

迅速かつ汚い方法は、私はSQLを形成する際をフォーマット示唆pass a parameter

where 
    ((@Param=1 and REGION = 'IC') 
    or 
    (@Param=2 and REGION <> 'IC')) 
+0

私はこのアイデアが好きです。おそらくやや効率的ですが、2つの異なるプロシージャ/ビューを持つことができます.1つは不等であり、もう1つは等価です。 オペレータがプロシージャを使用していて、Where節以外のロジックがある場合は、それをビューに入れてから2プロシージャに入れてください。 –

1

です:C#6.0文字列interpotaionの場合

// depending on condition 
// we put either REGION='IC' or REGION<>'IC' instead of {0} place holder 
string sql = string.Format( 
    // Make slq readable and maintainable, use @ verbatim strings 
    @"select ... 
    where {0} 
    ...", condition ? "REGION='IC'" : "REGION<>'IC'"); 

using (var command = new SqlCommand(connection)) { 
    command.CommandText = sql; 
    ... 
} 

は、代替です:

string sql = 
    [email protected]"select ... 
     where {(condition ? "REGION='IC'" : "REGION<>'IC'")} 
     ..."; 
+0

このソリューションはこの問題を解決すると思われますが、最初の使用方法はわかりませんでしたしようとします。ありがとう。 –

関連する問題