2017-03-01 102 views
0

所以我有我的登錄代碼在vb.net的問題,並想知道任何人都可以建議什麼是我的代碼有問題?VB.NET登錄問題與SQL

我得到的錯誤是:

類型「System.Data.SqlClient.SqlException」出現在system.data.dll但在用戶代碼中沒有處理

信息的例外:數據類型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 
+0

你意識到這是一個SQL注入等待發生的權利?參數化您的查詢!更不用說純文本密碼了嗎? – VDWWD

+0

你能幫我這麼做嗎? –

+0

[Goole是你的朋友](https://www.google.nl/?gws_rd=ssl#q=parametarized+queries+vb&*) – VDWWD

回答

0

最有可能您的[EmailAddress]字段或您的[Password]場在[PatientDetails]text類型。您需要將基礎數據類型更改爲varcharnvarchar以使用此查詢。

更重要的是,您的查詢很容易受到SQL注入攻擊,因爲您既沒有對這些輸入進行消毒,轉義也沒有參數化。試想一下,如果有人在用戶名框中輸入如下:

';DELETE FROM PatientDetails; -- 

當你檢查自己的密碼,他們只是刪除了整個表...

0

除了什麼添說,沒有任何理由EmailAddress或密碼字段的類型爲text。兩者都使用nvarchar(255)就足夠了。