对于我的登录控制,我在SQL语句中使用参数。麻烦的是,如果人们使用SQL注入,恐怕他们也能进入。解决SQL注入问题
我有两个文本框,并将值传递给SQL语句,这将检查值是否在数据库中找到。
有没有办法确保这是不可能的?我知道在PHP中你需要使用文本框的前面。
谢谢你的时间!
对于我的登录控制,我在SQL语句中使用参数。麻烦的是,如果人们使用SQL注入,恐怕他们也能进入。解决SQL注入问题
我有两个文本框,并将值传递给SQL语句,这将检查值是否在数据库中找到。
有没有办法确保这是不可能的?我知道在PHP中你需要使用文本框的前面。
谢谢你的时间!
在查询中使用参数:
// C#
SqlCommand cmd = new SqlCommand("UPDATE Products SET description = @Description WHERE id = @ID");
cmd.Parameters.AddWithValue("@Description", "something");
cmd.Parameters.AddWithValue("@ID", 123);
而且在VB.net等价的:
// VB.net
Dim cmd As New SqlCommand("UPDATE Products SET description = @Description WHERE id = @ID")
cmd.Parameters.AddWithValue("@Description", "something")
cmd.Parameters.AddWithValue("@ID", 123)
是的,你应该使用SqlParameter。
参数化的查询推荐的
参见下面的例子
Private Sub DisplayPersonData(ByVal first_name As String, _
ByVal last_name As String)
' Open the connection.
connUsers.Open()
' Make a Command for this connection
' and this transaction.
Dim cmd As New OleDb.OleDbCommand(_
"SELECT * FROM People WHERE FirstName=? AND " & _
"LastName=?", _
connUsers)
' Create parameters for the query.
cmd.Parameters.Add(New _
OleDb.OleDbParameter("FirstName", first_name))
cmd.Parameters.Add(New OleDb.OleDbParameter("LastName", _
last_name))
' Execute the query.
Dim db_reader As OleDbDataReader = _
cmd.ExecuteReader(CommandBehavior.SingleRow)
' Display the results.
If db_reader.HasRows Then
db_reader.Read()
txtFirstName.Text = _
db_reader.Item("FirstName").ToString
txtLastName.Text = _
db_reader.Item("LastName").ToString
txtStreet.Text = db_reader.Item("Street").ToString
txtCity.Text = db_reader.Item("City").ToString
txtState.Text = db_reader.Item("State").ToString
txtZip.Text = db_reader.Item("Zip").ToString
Else
For Each ctl As Control In Me.Controls
If TypeOf ctl Is TextBox Then ctl.Text = ""
Next ctl
End If
' Close the connection.
connUsers.Close()
End Sub
如果您具有适当的服务器端权限,则可以创建存储过程来接受参数,而不是将更新语句分配给命令对象。 SP还提供比动态DML语句更好的性能。
我知道,但我的提供程序不支持存储过程atm。 – CustomX 2011-05-18 10:53:10
不错的例子...注意他确实选择了VB.Net作为其中一个标签:-) – Xander 2011-05-18 10:45:46
@Xander,谢谢,将在一秒钟内添加VB示例! – 2011-05-18 10:46:51
的确很不错。无论你使用@Description还是?,它是否重要,因为我似乎只能使用? – CustomX 2011-05-18 10:49:59