2013-04-04 47 views
0

1) 這是我的代碼來檢查用戶名和密碼,如果匹配,則登錄:DataReader的問題

Private Sub cmdOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOK.Click 
    Try 
     Dim dr As OleDb.OleDbDataReader 
     Dim cmd As OleDb.OleDbCommand 
     Dim logQuery As String = ("SELECT * FROM Login_db where Username='" & txtUsername.Text & "'") 
     cnnOLEDB.Open() 
     cmd = New OleDb.OleDbCommand(logQuery, cnnOLEDB) 
     dr = cmd.ExecuteReader    
     If dr.Read = True Then   <-------------------- problem 

      If txtUsername.Text = dr("Username") Then 
       If txtPassword.Text = dr("Password") Then 
        MsgBox("Hii") 
       End If 
      Else 
       MsgBox("Byee") 
      End If 
     End If 
    Catch ex As Exception 
     MsgBox(ex.Message) 
     cnnOLEDB.Close() 
    End Try 

End Sub 

if dr.read=true then返回false即使I HV在我的表中的記錄行...

2)這是我的代碼在登錄表中添加一個新用戶

嘗試

 Dim addUser As String 

     addUser = "INSERT INTO Login_db(Username,Password) VALUES (@uname,@pswd)" 
     cnnOLEDB.Open() 

     Dim _comm As OleDb.OleDbCommand = New OleDb.OleDbCommand(addUser, cnnOLEDB) 

     _comm.Parameters.AddWithValue("@uname", txtUsername.Text) 
     _comm.Parameters.AddWithValue("@pswd", txtPasswd.Text) 
     _comm.ExecuteNonQuery() 
     cnnOLEDB.Close() 

     MsgBox("Record Inserted", MsgBoxStyle.OkOnly) 
    Catch ex As Exception 
     MsgBox(ex.Message) 
     cnnOLEDB.Close() 
    End Try 

錯誤是:插入語句中的語法錯誤..我無法找到我的錯誤。

PLZ解決我的問題...謝謝..

回答

1

我想,這是一個MS Access數據庫。在這種情況下,PASSWORD這個詞是一個保留關鍵字。
如果您已將該名稱用作列名,那麼您應該始終用方括號將其封裝。

addUser = "INSERT INTO Login_db(Username,[Password]) VALUES (@uname,@pswd)" 

作爲一個側面說明,你的選擇查詢,以獲得用戶是危險的,如果用戶名包含一個單引號(撇號)可能失敗或更糟的可能是SQL注入攻擊向量。在插入語句中使用始終參數化的查詢

Dim logQuery As String = "SELECT * FROM Login_db where [email protected]" 
cnnOLEDB.Open() 
cmd = New OleDb.OleDbCommand(logQuery, cnnOLEDB) 
cmd.Parameters.AddWithValue("@uname", txtUserName.Text) 
+0

非常感謝史蒂夫....它的工作原理 – Harabati 2013-04-04 10:10:49