每当您隐瞒sql并使用用户可以直接访问的变量时,都存在SQL注入的危险。
在您的情况下,修复程序可能如下所示:
sql = "INSERT INTO purchase(customer_id, ISBN, store_id, quantity) VALUES(@id, @isbn , 1, @number);"Dim cmd As New SqlCommand(sql, connection)cmd.Parameters.AddWithValue("@id", id )cmd.Parameters.AddWithValue("@isbn", isbn )cmd.Parameters.AddWithValue("@number", number)Dim rows As Integerrows = cmd.ExecuteNonQuery()第二个查询如下所示:
sql = "UPDATE inventory SET quantity = (quantity - @number) WHERe inventory.ISBN = @isbn AND store_id = 1"Dim cmd2 As New SqlCommand(sql, connection)cmd2.Parameters.AddWithValue("@number", id )cmd2.Parameters.AddWithValue("@isbn", isbn )rows = cmd2.ExecuteNonQuery通过使用参数,可以对任何可能是恶意代码的字符串进行转义。
其他好的参考资料:
什么是SQL注入?
来自“ Bobby Tables”
XKCD漫画的SQL注入如何工作?
编辑:
正如@AndyLester在评论中指出的那样,我试图建议的是,使用用户数据连接到您的可执行代码中是危险的!



