2009-06-17 9 views
1

OKおかげでたくさんも私を助けたが、今私はこの文は正しい取得したい別の問題を持っているすべての人別のSQLクエリステートメント

if (byNametextBox.Text != null && byBuildingtextBox.Text !=null && seTextBoxPublic1.Text == null) 
{ 
    da = new SqlDataAdapter("SELECT * FROM Students WHERE name='" +  byNametextBox.Text +"and [buil-id]='"+byBuildingtextBox.Text+ "'", MyConn); 

} 

のために私は2つの条件 と同じテーブルから選択したい下さい

+11

Do * *はこのようなクエリ文字列を作成しません。パラメータ化されたクエリを使用してください。それ以外の場合は、SQLインジェクション攻撃に対して広く利用されています。 –

答えて

1

SQLクエリでパラメータを使用するとセキュリティが向上します。

1

2つのパラメータでSqlCommandを作成する必要があるとします。 ここに投稿したコードは、SQLインジェクション攻撃に対して安全ではありません。

従ってください:

http://msdn.microsoft.com/en-us/library/ms161953.aspx

1

をあなたの質問に答えるために、しかし、あなたのコードは、SQLを作成します。

SELECT * FROM Students WHERE name='NAMEand [buil-id]='ID' 

SELECT * FROM Students WHERE name='NAME' and [buil-id]='ID' 
2

あるべきパラメータを使用してください!何らかの理由であなたが彼らに対してであれば、この作業をする必要があります:

string strStatement = String.Format("SELECT * FROM Students WHERE [name] = '{0}' AND [buil-id] = '{1}'", byNametextBox.Text, byBuildingtextBox.Text); 
da = new SqlDataAdapter(strStatement, MyConn); 
+0

ありがとうございます –

+0

これはパラメータではありません。あなたはまだ文字列を作成していますが、ほとんど同じです。 – Kobi

+0

はい、Kobiですが、何らかの理由で彼がパラメータを使用していないと言ったように、私が投稿したコードはうまく動作します(ソースコードは正しくフォーマットされておらず、できませんでした)。 –

0

使用parameterizedクエリをSQLインジェクションを防ぐために、また、ここにいくつかの追加のコードあなたがデータテーブル移入したい場合。

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Students WHERE name = @byName and [buil-id]= @byBuilding " , MyConn) 
          DataTable dt= new DataTable(); 
          da.SelectCommand.Parameters.AddWithValue("@byName", byNametextBox.Text); 
          da.SelectCommand.Parameters.AddWithValue("@byBuilding", byBuildingtextBox.Text); 
          da.Fill(dt);