2014-03-24 122 views
0

我在ASP.NET登錄表單上的標題中收到錯誤消息有人知道我該如何解決它?幫助深表感謝從字符串「」轉換爲「布爾型」類型無效

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    Dim conn As New MySqlConnection 

    conn.ConnectionString = ("server=localhost;port=3307;user=user;password=password;database=DB;") 

    Try 

    Dim SQL As String = "select * from users3 where uname = '" & txtUName.Text & "' AND password = '" & txtPwd.Text & "'" 

    conn.Open() 

    Dim cmd As New MySqlCommand(SQL, conn) 
    Dim reader As MySqlDataReader = cmd.ExecuteReader 

     reader.Read() 
     Dim isValidLogin As Boolean 
     Boolean.TryParse(reader.GetValue(1), isValidLogin) 

     If isValidLogin Then 
      Session("UserName") = txtUName.Text 
     Response.Redirect("REGISTERPROP.aspx") 
    Else 
     Response.Write("Invalid Login") 
    End If 

    Catch ex As Exception 
    Response.Write("An Error Occurred: " & ex.Message.ToString()) 
    End Try 
End Sub 
+0

可能重複[從字符串到boolean類型的轉換是無效的(http://stackoverflow.com/questions/7874049/conversion-from-string-to-type -boolean-is-not-valid) –

+0

該問題已解決,我認爲我沒有收到錯誤消息,但現在正在獲取此「在調用Read()之前訪問字段的無效嘗試」在asp上很虛弱。網和幫助非常感謝! – user3457014

+0

請將此問題設置爲回答,並在發佈當前代碼時提出新問題。 – NotMe

回答

1

變化:

Dim isValidLogin = reader.GetValue(1) 

到:

Dim isValidLogin As Boolean 
Boolean.TryParse(reader.GetValue(1), isValidLogin) 
+0

謝謝,我現在收到此錯誤消息「在調用Read()之前無效嘗試訪問字段」您有任何想法嗎?我感謝幫助! – user3457014

+1

你仍然會打電話給reader.Read(),對不對?這仍然是isValidLogin聲明之前? –

+0

的確是這樣,這看起來: 昏暗讀者作爲了MySqlDataReader = cmd.ExecuteReader reader.Read() 昏暗isValidLogin由於布爾 Boolean.TryParse(讀取器。如果isValidLogin然後 會話(「UserName」)= txtUName.Text – user3457014

1

好,消息是非常不言自明。你試圖將一個空的(無)字符串轉換爲布爾值。 Boolean唯一有效的字符串值是(不區分大小寫的)truefalse。你還有其他問題。如果用戶/密碼發現

  • 查詢返回0行(空集),如果沒有找到用戶名/密碼,和(大概)1列。但是,您不檢查Read()方法的返回值:如果讀取了一行,它將返回true,並返回false otherwise。您只能查詢成功匹配時返回的行:您應該在嘗試從其中檢索數據之前檢查該行。

  • 此外,您的查詢還有一個SQL Injection漏洞。考慮使用參數化查詢或存儲過程。你覺得如果有人類型(或簡稱公告)這回你的頁面的密碼字段可能會發生:

    ; drop table users3 ; 
    
  • 看來你存儲在數據庫中的明文密碼。結合您的SQL注入漏洞,您可能會對系統和用戶造成危害。考慮使用類似SHA-256的secure hashing algorithm對密碼進行醃製並對醃製的密碼進行散列。

查詢更改爲

`select 'true' from user3 where ...` 

而且使用DbReader.ExecuteScalar(),如果結果集爲空時返回結果的第一行設置或null的第一列執行它。然後你的邏輯變得更加簡單,像

Dim isValidLogin = cmd.ExecuteScalar() 
If isValidLogin IsNot Nothing And isValidLogin Then 
    Session("UserName") = txtUName.Text 
    Response.Redirect("REGISTERPROP.aspx") 
Else 
    Response.Write("Invalid Login") 
End If 
+0

我知道我的代碼很容易SQL注入,我會在這之後...我的主要目標是獲得這個登錄表單工作,我必須手這是明天在大學,如果我不能得到它的工作,我會失敗,我強調,因爲我在asp.net弱,我根本無法獲得形式的工作..看着我的完整代碼可以讓你知道它應該是什麼樣子才能工作?你不會相信我會有多棒! – user3457014

+0

我不是一個VB.Net的傢伙,所以我會成爲你的錯誤資源:D –

+0

感謝您的幫助,無論如何,它只是令我沮喪,現在我不是一個編碼員,所以我覺得這非常困難,尤其是當它影響我年級 :( – user3457014

相關問題