[英]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
类型的。 您需要将基础数据类型更改为varchar
或nvarchar
才能使用此查询。
更重要的是,您的查询很容易受到SQL注入的攻击,因为您既不清理,转义也不对这些输入进行参数化。 假设有人在用户名框中输入了以下内容:
';DELETE FROM PatientDetails; --
当您检查他们的密码时,他们只是删除了您的整个表格...
除了Tim所说的以外,EmailAddress或Password字段没有理由是text
类型。 两者都使用nvarchar(255)
就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.