0

select ステートメントに問題があります。

次のようになります。

myda = new SqlDataAdapter("Select * FROM tblAgenda WHERE tAgUsrId ='" + Session["usrId"] + "' AND tAgTBD = '" + Session["username"] + "' OR tAgTBD = '" + DBNull.Value + "' ", myconn);

しかし、その DBNull.Value を機能させる方法がわかりません。代わりに "" を使用してみましたが、うまくいきません。

このステートメントを書き直す方法についてのアイデアはありますか? ありがとうございました。

4

1 に答える 1

1

セッション値がすでにサニタイズされていると仮定すると、次のことができます。

myda = new SqlDataAdapter("Select * FROM tblAgenda WHERE tAgUsrId ='" +
    Session["usrId"] + "' AND tAgTBD = '" +
    Session["username"] + "' OR tAgTBD is null", myconn);

上記は、tAgTBDがnullであるすべての行が必要であることを前提としています。ユーザーIDへの制限を維持したい場合は、2つのOR条件の前後に角かっこを追加する必要があります。

myda = new SqlDataAdapter("Select * FROM tblAgenda WHERE tAgUsrId ='" +
    Session["usrId"] + "' AND (tAgTBD = '" +
    Session["username"] + "' OR tAgTBD is null)", myconn);

セッション値がサニタイズされていない場合は、SQLインジェクションを確認しSqlCommand、文字列を作成する代わりにwithパラメーターを使用することを検討する必要があります。とにかくこのルートに行くことを好むかもしれませんが、長期的に取得する方が良い習慣です。そうすれば、値がサニタイズされているかどうかを考慮する必要はありません。

于 2011-05-31T09:04:45.630 に答える