2015-10-26 26 views
0

有人可以告訴我在編碼中我做了什麼嗎?我試圖將用戶登錄名和密碼與數據庫中的用戶名和密碼相匹配。如果得到了行並匹配,那麼用戶將能夠登錄到系統中,但似乎我的系統只能讀取數據表的第一行(在數據庫內)。檢查現有的表格行

這是我目前使用的編碼。

Private Sub CheckLogin() 
     Dim lCnn As New SqlConnection 
     Dim lCmd As New SqlCommand 
     Dim lRd As SqlDataReader 
     Dim lsCmd As String 

     If TextBoxLogin.Text = "" Then 
      MsgBox("Enter your Username.") 
      Try 
       TextBoxLogin.Focus() 
      Catch ex As Exception 

      End Try 
     ElseIf TextBoxPass.Text = "" Then 
      MsgBox("Enter your Password.") 
      Try 
       TextBoxPass.Focus() 
      Catch ex As Exception 

      End Try 
     Else 
      lCnn.ConnectionString = GetConnString() 
      lCnn.Open() 
      lCmd.Connection = lCnn 
      lsCmd = "SELECT * FROM UserInfo..UserInfo " 
      lsCmd &= " INNER JOIN UserInfo..UserAccess ON UserLogin = UA_UserLogin " 
      lsCmd &= " WHERE (UserLogin = " & SQLQuote(Trim(TextBoxLogin.Text)) & " AND UserPassword = " & SQLQuote(Trim(TextBoxPass.Text)) 
      lsCmd &= " AND UserActive = 1" 
      lsCmd &= " AND UA_AICode = 'MENU')" 
      lCmd.CommandText = lsCmd 

      lRd = lCmd.ExecuteReader() 

      If lRd.HasRows Then 
       lRd.Read() 
       lbLoginSuccess = True 

        gsLoginID = Trim(TextBoxLogin.Text) 
        gsUserPass = Trim(TextBoxPass.Text) 
        Me.Close() 
       Else 
        lnCurRetry += 1 
        Alert("Wrong Username or Password.") 
       End If 
      lRd.Close() 
      lCnn.Close() 
     End If 

     If Not lbLoginSuccess Then 
      If lnCurRetry >= 3 Then 
       Me.Close() 
      End If 
     End If 
    End Sub 

我感謝您的幫助。謝謝。

回答

1

你的代碼是不是真的壞,但可以更好,如果利用了sintax:

 Using LCnn As New SqlConnection 

     LCnn.ConnectionString = GetConnString() 
     Try 

     LCnn.Open() 
     Using LCmd As New SqlCommand("SELECT * FROM UserInfo " & _ 
            "INNER JOIN UserAccess ON UserLogin = UA_UserLogin " & _ 
            "WHERE (UserLogin = '" & TextBoxLogin.Text.trim & "' " & _ 
            "AND UserPassword = '" & TextBoxPass.Text.Trim & "' " & _ 
            "AND UserActive = 1 AND UA_AICode = 'MENU')", LCnn) 


      Dim LRdr As SqlDataReader 

      Try 
       LRdr = SQL_Cmd.ExecuteReader 
       If Not SQL_Rdr.HasRows Then 
        msgbox("Empty Results...") 
       else 
        <your code> 
       endif 

      catch ex as Exception 
        msgbox("Error: " & ex.message) 
      end try 

     end using ' Lcmd 

    catch exConn as Exception 
      msgbox("Error: " & exConn.message) 
    end try 


end using  ' LCnn 

記住:使用/結束使用語法可以幫助你管理資源。結束使用始終關閉並處理資源。

祝你好運

+0

結果仍然是一樣的。我的編碼應該能夠讓用戶(任何用戶參考數據庫)用正確的用戶名和密碼登錄系統? – Emerald

+0

如果Query功能在SQL管理和NOT功能之外(例如通過TCP/IP),則問題可能與SQL不接受外部連接有關。你確定其他最簡單的查詢從外部程序運行到SQL嗎? –

+0

對不起,我的壞。我的編碼其實是正確的。我忘記了我只爲管理員設置了訪問權限。這就是爲什麼它只讀1行。我很抱歉。是否有可能將其刪除?這樣人們就不會混淆 – Emerald