尝试在 Visual Studio 2015 中实现 Visual Basic 应用程序的登录脚本时出错



嗨,我确定这是一个非常简单的问题,但我对此完全陌生,只是在线学习教程,但我无法根据我的用途调整代码。基本上,当我尝试使用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

其中userpass是在文本框中输入的值。 这不是有效的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

最新更新