2013-04-04 45 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