为什么这个参数化的sql查询不返回结果?

时间:2015-10-16 09:43:31

标签: sql sql-server vb.net

我正在接管一个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

2 个答案:

答案 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"