我的專案和我的 Ms Access 2010 資料庫之間的連接似乎在我登錄我的專案的那一刻是正確的。但是,在第一次試用后(如果用戶和/或密碼不正確),當我再次嘗試登錄時,會出現錯誤。它說“連接沒有關閉。連接的當前狀態是打開的”。我剛剛為 MySql 服務找到了可能的解決方案,但我使用的是 Ms Access 資料庫。似乎給出錯誤的代碼如下。有什么建議嗎,請:
Public Function Validation()
da.Fill(dt)
connection.Open()
For Each DataRow In dt.Rows
If txtUser.Text = DataRow.Item(0) And txtPassword.Text = DataRow(1) Then
If cmbAccountType.Text = DataRow(2) Then
connection.Close()
Return True
End If
End If
Next
Return False
End Function
uj5u.com熱心網友回復:
你為什么首先打開連接?您沒有在OpenandClose呼叫之間使用它,那有什么意義呢?如果連接當前已關閉,該Fill方法將自動打開連接,如果打開連接,該方法將再次自動關閉連接,即在必要時打開連接,然后將其保持在原始狀態Fill。Update擺脫Open和Close呼叫。
uj5u.com熱心網友回復:
首先,vb.net 中的函式需要一個資料型別。我不知道da.Fill(dt)這個函式在做什么。如果您沒有打開的連接,您將無法填充任何內容,但是在下一行您從某處打開一些未知連接。
OleDb 不注意引數的名稱。引數在 sql 字串中的位置必須與引數添加到引數集合的順序相匹配。
這是一種方法。
Private ConnStr As String = "Your connection string"
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Validation(txtUser.Text, txtPassword.Text, cmbAccountType.Text) Then
'Do something
End If
End Sub
Public Function Validation(UName As String, PWord As String, Type As String) As Boolean
Dim Count As Integer
Using cn As New OleDbConnection(ConnStr),
cmd As New OleDbCommand("Select Count(*) From SomeTable Where User = @User And Password = @Password And AccountType = @Type;", cn)
cmd.Parameters.Add("@User", OleDbType.VarChar).Value = UName
cmd.Parameters.Add("@Password", OleDbType.VarChar).Value = PWord
cmd.Parameters.Add("@Type", OleDbType.VarChar).Value = Type
cn.Open()
Count = CInt(cmd.ExecuteScalar)
End Using
If Count > 0 Then
Return True
End If
Return False
End Function
當然,您永遠不應該將密碼存盤為純文本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422439.html
標籤:
