2011-07-05 12 views
0

で選択クエリ内のNULLパラメータをSqlCommandオブジェクト @name。 この結果はどのように達成できますか?取扱いは、私は、この例のコードを持ってasp.net

ありがとうございます。

+0

これは本当に機能していますか? txtUsername.Text> 0 –

+0

はい、それは動作します:D – Attila

+1

@Attila *本当に*?あなたは '.Length'を見逃していないと確信していますか? –

答えて

2
bool useName = !String.IsNullOrEmpty(txtUsername.Text); 
StringBuilder query = new StringBuilder("select * from xy where [email protected]"); 
if(useName) 
query.Append(" AND [email protected]"); 

SqlCommand cmd = new SqlCommand(query.ToString()); 
// add ID param 
if(useName) { 
    // add name param 
} 
+0

Tnx。 最後に、どのようにしてcmdでクエリを取得し、それを文字列に入れることができるか知っていますか?私は文字列query2 = cmd.ToString()はトリックをしないと思う:P – Attila

+0

bool useName = String.IsNullOrEmpty(txtUsername.Text); bool useName =!String.IsNullOrEmpty(txtUsername.Text);でなければなりません。 –

+0

@Attila cmd.CommandTextはslq文を保持します。 'string query2 = cmd.CommandText;' –

1

あなたは

"SELECT * FROM xy WHERE id = @id and (@name = '' OR name = @name"); 

にあなたのクエリを変更することができますが、パラメータに値がないときに、クエリでふざける保存します。

+0

私はなぜyou'getをダウン票を知らない、この解決策は良い解決策 –

+0

これは確かにされています非常にクールなソリューション。しかし、クエリオプティマイザがスマートで、@nameが空の場合に 'where'ブロックがトートロジを持つことが分かります。それ以外の場合、このクエリは2つの文字列比較のオーバーヘッドを持ちます。常にNULL値を確認することを忘れないでください。 – hage

1
SqlCommand cmd = new SqlCommand(); 
if(txtUsername.Text != string.Empty) 
{ 
cmd.CommandText = "select * from xy where id = @id and name = @name"; 
cmd.Parameters.Add["@name", SqlDbType.VarChar); 
cmd.Parameters["@name"].Value = txtUsername.Text; 
} 
else 
{ 
cmd.CommandText = "select * from xy where id = @id"; 
} 
-1

stringtemplate.orgを見てください。 STはあらゆる種類のテキスト構築を可能にし、非常に柔軟性があります。あなたの例では、ランタイムの構築を必要とする唯一のクエリがある場合は

は、STが過剰です。 しかし、私は現在、多くのクエリを持つプロジェクトに取り組んでおり、STは私を幸せにしました。すべてのクエリが単一のファイルに格納され、多くのC#クラス内に分散されていないという事実は、STへの移行を価値のあるものにするには十分です。

関連する問題