嗨,我确定这是一个非常简单的问题,但我对此完全陌生,只是在线学习教程,但我无法根据我的用途调整代码。基本上,当我尝试使用nvarchar而不是int作为数据库中的用户名和密码列时,我不断收到以下错误:
类型为"System.Data.SqlClient.SqlException"的未处理异常 发生在系统数据中.dll
这是我的代码:
Public Class Login
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Dim con As New SqlClient.SqlConnection(MyConnection.MyConnectionString)
con.Open()
Dim dr As SqlClient.SqlDataReader
Dim cmd As New SqlClient.SqlCommand("select * from [customer_login] where username=" + tbUsename.Text + " and password=" + tbPassword.Text + "", con)
dr = cmd.ExecuteReader
If dr.Read Then
MsgBox("you are logged on as" + tbUsename.Text + "put logged in home page here")
End If
End Sub
End Class
编辑:完整的错误消息是:
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Additional information: Invalid column name 'a123'.
Invalid column name 'a123'.
您拥有的代码生成以下 SQL:
select * from [customer_login] where username=user and password=pass
其中user
和pass
是在文本框中输入的值。 这不是有效的SQL,值需要用引号字符串括起来。 或者更好的是,它们应该被命名为参数,以防止一类称为SQL注入的攻击,或者只是为了防止当用户的名称中有撇号并且您在运行时构建的SQL语句因此出现错误时出现问题。
将来,您应该使用尝试..捕获块以捕获异常并在调试器中查看异常的内容。 在这种情况下,它会很快在您的 SQL 语句中显示错误。
查询中缺少单引号
Public Class Login
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Dim con As New SqlClient.SqlConnection(MyConnection.MyConnectionString)
con.Open()
Dim dr As SqlClient.SqlDataReader
Dim cmd As New SqlClient.SqlCommand("select * from [customer_login] where username='" + tbUsename.Text + "' and password='" + tbPassword.Text + "'", con)
dr = cmd.ExecuteReader
If dr.Read Then
MsgBox("you are logged on as" + tbUsename.Text)
'put logged in home page here.show()
End If
End Sub
End Class