テーブルをクエリしているとします。ヌルが検索する値の1つである可能性があります。挨拶がnullのときに、このパラメータ化されたクエリでnullable値を処理する適切な方法はありますか?
command.CommandText = "select * from People where Saluation = @salutation";
if(salutation != null) command.Parameters.AddWithValue("@salutation", salutation);
else command.Parameters.AddWithValue("@salutation", DBNull.Value);
のようにセットアップされたクエリは結果を返しません。だから私はこれを代わりにする傾向がありますが、それは私には醜い感じです:
string whereClause;
if(!string.IsNullOrEmpty(salutation))
{
whereClause = "Salutation = @salutation";
command.Parameters.AddWithValue("@salutation", salutation);
}
else whereClause = "Salutation is null";
command.CommandText = "select * from People where " + whereClause;
もっと正しい方法がありますか?
外部ストリングが連結されていない場合、連結によりインジェクションの脆弱性が作成されません。 –
本当に悪い習慣に入るのは簡単です。 –
@salutationがnullの場合、元のバージョンはすべての行を返します。@salutationはnullであり、salutationはnullです。私はちょうど編集を投稿し、それがピアレビューを経ると受け入れます。 –