3

SQL パラメータを含む SQL クエリ ステートメントを含む文字列を受け取る Web フォームに取り組んでいます。SqlCommandパラメータごとに ASP.NET コントロールを生成し、各コントロールの値を、が を埋めるために使用する SQL クエリ文字列のパラメータに割り当てますDataAdapter

オプションのパラメータを管理するのに問題があります。

元。

1) 文字列をページに渡します。

string query = "SELECT * FROM Table WHERE Field1=@P1 AND field2=@P2";

2) パラメータごとに Web コントロールを生成する

TextBox P1 = new TextBox();
P1.ID = "P1";
...
TextBox P2 = new TextBox();
P2.ID = "P2";
...
PanelParameters.Controls.Add(P1);
PanelParameters.Controls.Add(P1);

3) クリックすると、各パラメータの値がSqlCommandas パラメータに渡されます。

SqlCommand cmd = new SqlCommand(query, conn);

cmd.Parameters.AddWithValue("@P1", P1.Text);

cmd.Parameters.AddWithValue("@P2", P2.Text);

4) ここでOK!

しかし、パラメータがOPTIONALの場合、どうすればそれを管理できますか?

P2 = NULLP2 がオプションの場合、ユーザーはそれをコンパイルできず、その場合は設定(パラメーターの値の設定)したくありませんDbNull.Valueが、P2 がクエリ SQL から消えてほしいと思います。

手伝って頂けますか?

* UPDATE * 非常に複雑な SQL ステートメントが含まれているため、受け取ったクエリを編集できません。

4

2 に答える 2

5

クエリを最小限に変更します。

string query="SELECT * FROM Table WHERE Field1=@P1

次に、条件を付けて残りを追加します。

if(P2.Text != "")
{
    cmd.Parameters.AddWithValue("@P2",P2.Text);
    query += " AND field2=@P2";
}
于 2013-04-11T10:10:22.623 に答える
2

caseステートメントを使用して試すことができます:

SELECT * FROM Table WHERE Field1=@P1 AND CASE WHEN field2= null OR field2= '' THEN field2 ELSE @P2 END

引き続きパラメーターを送信しますが、null または空の場合は無視されます。

于 2013-04-11T10:12:20.310 に答える