我正在执行下面的命令,以便从Access DB运行一个查询。
Dim search As String = txtUnitCode.Text
Dim sText As String = String.Empty
Dim aClients As String = My.Settings.ClientDB
Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & aClients & ""
Using cn As New OleDb.OleDbConnection(sConnString)
cn.Open()
If txtUnitCode.Text = "" Then Exit Sub
Dim cmd As New OleDb.OleDbCommand("SELECT Name FROM Units WHERE (Code = " & search & ") ", cn)
Dim r As OleDb.OleDbDataReader = cmd.ExecuteReader()
If Not r.HasRows Then Exit Sub
Do While r.Read()
sText = sText & r.GetString(0)
Loop
End Using
txtUnitName.Text = sText当我在VS中运行代码分析时,它表示该行中存在漏洞。
Dim cmd As New OleDb.OleDbCommand("SELECT Name FROM Units WHERE (Code = " & search & ") ", cn)
基本上,我认为这意味着代码的search部分最好是一个Parameter。我已经让这些代码可以使用OleDbDataAdapter来处理另一段代码,但是我无法用OleDbConnection来理解它
任何指针
谢谢
发布于 2014-05-15 21:44:39
连接没有参数。您可以使用OleDbConnectionStringBuilder类来构建连接字符串。
但是对于Command对象,是的,总是使用参数来避免SQL注入:
Dim cmd As New OleDb.OleDbCommand("SELECT Name FROM Units WHERE Code = @code", cn)
cmd.Parameters.AddWithValue("@code", search)请注意,OleDb库实际上并不使用@code名称签名,它将按索引顺序填充参数,因此您可以用一个问号(?)替换@代码。
https://stackoverflow.com/questions/23689213
复制相似问题