2010-12-30 6 views
0
Dim cmdSelect As New SqlCommand("SELECT DISTINCT [seat_remain] FROM [a1_ticket] WHERE serv_code =" & lab5.Text & "ORDER BY [Ticket_no] DESC", SQLData) 
+4

VB.NETスニペットとSQLクエリの両方であり、SQLインジェクションセーフではないと思います。 http://imgs.xkcd.com/comics/exploits_of_a_mom.png –

+1

**あなたは何を**期待していますか? **実際に**何をするのですか? –

答えて

3

欠落引用:

Dim cmdSelect As New System.Data.SqlClient.SqlCommand("SELECT DISTINCT [seat_remain] FROM [a1_ticket] WHERE serv_code ='" & lab5.Text & "' ORDER BY [Ticket_no] DESC", SQLData) 
+1

「serv_code」は整数である可能性が高いので、引用符は必要ありません。 –

+3

@Uwe Keim:引用符ではなくても、Scorpi0が追加したスペースは確かに必要でした。 – Chris

+0

私はそれが引用の問題だと思うが、実際にはスペースが足りないかもしれない。それに気付かなかった:p –

8

あなたはパラメータ化クエリまたはストアドプロシージャの代わりにSQLクエリを構築するための文字列の連結を使用しています。それが間違っているのです。これを改善する方法は次のとおりです。

Dim cmdSelect As New System.Data.SqlClient.SqlCommand("SELECT DISTINCT [seat_remain] FROM [a1_ticket] WHERE serv_code = @serv_code ORDER BY [Ticket_no] DESC", SQLData) 
cmdSelect.Parameters.AddWithValue("@serv_code", lab5.Text) 

これで問題は解決しますが、SQLインジェクションに対しては安全です。

関連する問題