我正在接管一个VB项目,并且凭借我有限的VB技能,我无法获得以下参数化查询以返回结果:
Dim strSQLUser As String = "Select Name, CompanyID from Users where UserName = @UserName"
dbCommand = New SqlCommand(strSQLUser, dbConn)
dbCommand.Parameters.AddWithValue("@UserName", User)
dr = dbCommand.ExecuteReader
然而,这是可行的原始代码:
Dim strSQLUser As String = "Select Name, CompanyID from Users where UserName ='" & User & "'"
dbCommand = New SqlCommand(strSQLUser, dbConn)
dr = dbCommand.ExecuteReader
正如您所看到的,原始代码易受SQL注入攻击,需要修复。
额外 - 这是读取的行:
While dr.Read
DbUser = dr.GetValue(0).ToString
DbCompany = dr.GetValue(1).ToString
End While
答案 0 :(得分:2)
试试这个:
Dim strSQLUser As String = "Select Name, CompanyID from Users where UserName =@UserName"
dbCommand = New SqlCommand(strSQLUser, dbConn)
dbCommand.Parameters.AddWithValue("@UserName", User.Text)
dr = dbCommand.ExecuteReader
另外,更好的方法是提供以下值:
dbCommand.Parameters.Add("@UserName", SqlDbType.VarChar).Value = User.Text
假设用户是varchar即文本类型。
答案 1 :(得分:1)
使用参数时,不要在参数'
周围指定引号。所有参数都会自动转换为各自的列类型,例如date,nvarchar等。所以没有更多的引号。
Dim strSQLUser As String = "Select Name, CompanyID from Users where UserName =@UserName"