2014-03-26 68 views
0

sqlLink.ConnectionString =「Provider = Microsoft.ACE.OLEDB.12.0; Data Source ='C:\ Users \ will \ Documents \ Computing \ ComputingProjectDatabase.accdb';」 sqlLink.Open() 嘗試 如果txtUsername.Text = 「」 那 MSGBOX( 「你沒有輸入用戶名!」) 返回 elseif的txtPassword.Text = 「」 那 MSGBOX(「你沒有輸入密碼! 「) 返回 elseif的txtPassword.Text <> txtPasswordConf.Text然後 MSGBOX(」 您的密碼不匹配!「) 返回 否則VB Access數據庫防止重複輸入錯誤

   Using sqlOrder As New OleDbCommand 
       Dim sqlCheck As New OleDbCommand 
       sqlCheck.CommandText = "SELECT count(*) FROM LoginSystem WHERE username = @username" 
       sqlCheck.Parameters.AddWithValue("@username", txtUsername.Text) 

       Dim oleRdr As OleDbDataReader 
       oleRdr = sqlCheck.ExecuteReader() 
       If oleRdr.HasRows = True Then 
        oleRdr.Read() 
        If oleRdr.Item(0) = 0 Then 
         sqlOrder.CommandText = "INSERT INTO LoginSystem ([Username], [Password], [PasswordConf]) VALUES ('" & txtUsername.Text & "','" & txtPassword.Text & "','" & txtPasswordConf.Text & "')" 
         sqlOrder.ExecuteNonQuery() 
         MsgBox("You have successfully registered, you can log in now!") 
        Else 
         MsgBox("Username is not currently available, please choose new username.") 
        End If 
       End If 
      End Using 

     End If 

    Catch ex As Exception 
     MsgBox("An error occurred:" & ex.Message) 

    End Try 
    sqlLink.Close() 
    Me.Close() 
    LoginScreen.Show() 
End Sub 

再次>>。 <這裏只是一個小問題。每次我創建一組登錄數據(在這種情況下,用戶名是Heather,密碼是Trentshop)的副本時,我會返回一個尷尬的「數據已保存」,然後出現一個長錯誤,指出數據未保存爲已經有可用的重複。

理想情況下,我希望它只是說「用戶名已被使用,請選擇一個新的」。我用ExceptDuplicateName和其他類似的類型來弄清楚。但由於某種原因,我無法理解這一點。我想我錯過了一些非常明顯的東西,在這種情況下,如果有人能夠幫助我解決這個問題,那將是一個很大的幫助。 <

回答

0

處理此問題的最佳方法是在嘗試插入用戶名可用之前檢查。您應該也使用參數化查詢作爲針對sql注入的工具。

Dim sqlCheck As New OleDbCommand 
sqlCheck.CommandText = "SELECT count(*) FROM LoginSystem WHERE username = @username" 
sqlCheck.Connection = sqlLink 
sqlCheck.Parameters.AddWithValue("@username",txtUsername.Text) 

Dim oleRdr as new OleDbReader = sqlCheck.ExecuteReader() 
If oleRdr.HasRows = True Then 
    oleRdr.Read() 
    If oleRdr.Item(0) = 0 Then 
     'username is available and you can do insert command now 
    Else 
     'username is not available 
    End If 
End If 

您也應該使用「使用」的語句來正確地處理你的對象適當的,但由於這是切你的問題我會只是提供一個鏈接http://msdn.microsoft.com/en-us/library/htd05whh.aspx

或者你可以創建一個存儲過程來處理這個返回值表示成功或失敗的整個過程

+0

我將它集成到代碼中,它看起來應該可以工作,但是我得到一個「Connection not established error from」,而不是完全確定,從未真正體驗過它。很奇怪。 –

+0

您可能需要在連接對象上使用.Open()方法,然後才能執行讀取器 – 5uperdan

+0

,並且需要設置oledb命令的連接屬性: sqlCheck.Connection = sqlLink – 5uperdan