繁体   English   中英

VB.NET SQL登录问题

[英]VB.NET Login Problems with SQL

因此,我在vb.net上的登录代码遇到问题,想知道是否有人可以建议我的代码出了什么问题?

我得到的错误是:

System.Data.dll中发生类型'System.Data.SqlClient.SqlException'的异常,但未在用户代码中处理

附加信息:数据类型text和varchar在等于运算符中不兼容。

码。

Imports System.Data.SqlClient
Partial Class Login Inherits System.Web.UI.Page

    Protected Sub btnlogin_Click(sender As Object, e As EventArgs) Handles btnlogin.Click

        Dim conn As New SqlConnection
        Dim cmd As New SqlCommand
        Dim dr As SqlDataReader

        Dim LogEmail As String
        Dim LogPassword As String

        LogEmail = txtLogEmail.Text
        LogPassword = txtLogPword.Text

        conn.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\User\Documents\Visual Studio 2015\WebSites\myAppointments\App_Data\Database.mdf;Integrated Security=True"
        cmd.Connection = conn
        conn.Open()
        cmd.CommandText = "SELECT EmailAddress, Password FROM PatientDetails WHERE EmailAddress = '" & txtLogEmail.Text & "' and Password = '" & txtLogPword.Text & "'"
        dr = cmd.ExecuteReader
        If dr.HasRows Then
            lblLogin.Text = "Login Successful!"
        Else
            lblLogin.Text = "Login Unsuccessful! :("
        End If

        conn.Close()

    End Sub

End Class

[PatientDetails]表中的[EmailAddress]字段或[Password]字段很可能是text类型的。 您需要将基础数据类型更改为varcharnvarchar才能使用此查询。

更重要的是,您的查询很容易受到SQL注入的攻击,因为您既不清理,转义也不对这些输入进行参数化。 假设有人在用户名框中输入了以下内容:

';DELETE FROM PatientDetails; --

当您检查他们的密码时,他们只是删除了您的整个表格...

除了Tim所说的以外,EmailAddress或Password字段没有理由是text类型。 两者都使用nvarchar(255)就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM