2011-12-07 42 views
0

失配我有一個錯誤ERROR [22018] [微軟] [ODBC Microsoft Access驅動程序]數據類型在條件表達式不匹配。我一直在試圖解決這個問題,但不幸的是我無法得到這個錯誤的破解。我是dotNet的新手。ERROR [22018] [微軟] [ODBC Microsoft Access驅動程序]數據類型在條件表達式

Public Sub LogInContinue(ByVal senter As Object, ByVal e As EventArgs) 
    Dim LibDS As DataSet = New DataSet 
    Dim LibDA As OdbcDataAdapter = New OdbcDataAdapter("SELECT * FROM tblUserAccount WHERE Uname='" & txtUserName.Text & "'", LibConn) 
    Dim A As Integer 
    LibDS.Tables.Add("tblUserAccount") 
    A = LibDA.Fill(LibDS, "tblUserAccount") 

    If A = 0 Then 
     MessageBox.Show("Username you have supplied is invalid!" & vbCrLf & "Please click OK button to try again.", "INVALID USERNAME", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    Else 
     If LibDS.Tables(0).Rows(0)("Uname") = Me.txtUserName.Text AndAlso LibDS.Tables(0).Rows(0)("Password") = Me.txtPassword.Text Then 
      NewUserID.UUserID = LibDS.Tables(0).Rows(0)("UserID") 
      UserAcceptedRole() 
     Else 
      MessageBox.Show("Password you have supplied is invalid." & vbCrLf & "Please try again!", "PASSWORD MISMATCHED", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     End If 
    End If 
End Sub 

Private Sub UserAcceptedRole() 
    Dim ActualRole As String 
    Dim LibDSa As DataSet = New DataSet 
    Dim LibDAa As OdbcDataAdapter = New OdbcDataAdapter("SELECT * FROM tblRoles WHERE UserID='" & NewUserID.UUserID & "'", LibConn) 
    LibDSa.Tables.Add("tblRoles") 
    LibDAa.Fill(LibDSa, "tblRoles") 

    ActualRole = LibDS.Tables(0).Rows(0)("Role").ToString 
    If ActualRole = "Member" Then 
     lblWelcome.Text = "Welcome " & txtUserName.Text 
     NewObject.NewLabel(lblID, "You are logged in as " & ActualRole, "Calibri", 12, FontStyle.Regular, 666, 40) 
     btnLogIn.Text = "Logout" 
    End If 
End Sub 

的錯誤是在根據Private Sub UserAcceptedRole()代碼LibDAa.Fill(LibDSa, "tblRoles")。請告訴我這個錯誤是什麼?如果您對我的代碼(樣式)有改進建議,請告訴我。感謝負載。

+0

tblRoles的UserID字段類型是什麼?並刪除statmenet - LibDSa.Tables.Add(「tblRoles」)。 – adatapost

+0

@AVD它是** **號立即 – aer

+0

調試(或添加一個斷點)UserAcceptedRole()方法和驗證** ** NewUserID.UUserID的值。 NewUserID.UUserID的值是數字嗎? – adatapost

回答

1

始終使用參數(參數化SQL語句)。瞭解更多關於ParametersSQL Injection.

Private Sub UserAcceptedRole() 
    Dim ActualRole As String 
    Dim LibDt As New DataTable 
    Dim Cmd As New OdbcCommand 
    Cmd.CommandText="SELECT * FROM tblRoles WHERE [email protected]" 
    Cmd.Connection=LibConn 

    MsgBox("Verifying the value of : " & NewUserID.UUserID) 

    Cmd.Parameters.Add("@UserID",System.Data.Odbc.OdbcType.Int).Value=NewUserID.UUserID 

    Dim LibDAa As OdbcDataAdapter = New OdbcDataAdapter(Cmd) 
    LibDAa.Fill(LibDt) 

    If LibDt.Rows.Count<>0 Then 

     ActualRole = LibDt.Rows(0)("Role").ToString 

     If ActualRole = "Member" Then 
     lblWelcome.Text = "Welcome " & txtUserName.Text 
     .... 
     End If 
    End If 
End Sub 

PS:你可以使用的數據集了。

+0

** ERROR [07002] [微軟] [ODBC Microsoft Access驅動程序]參數太少預計1 **這是什麼錯誤 – aer

+0

@aerohn - 。?。可能是表或字段名稱拼寫錯誤,請檢查表的名稱並且進入Ms-Access數據庫 – adatapost

+0

我的MSAccess數據庫是2003版本,是在其他計算機上創建的,我的計算機上只有MSAccess2007,你認爲軟件版本有衝突嗎?我仍然可以打開在Access2003中創建的數據庫計算機 – aer

2

用戶ID可以是整數類型,因此嘗試「從周圍的用戶ID作爲查詢「232」等。該錯誤可能是在下面的語句刪除」:

Dim LibDAa As OdbcDataAdapter = New OdbcDataAdapter("SELECT * FROM tblRoles WHERE UserID='" & NewUserID.UUserID & "'", LibConn) 

檢查這:LibDS是當地本分

Public Sub LogInContinue(ByVal senter As Object, ByVal e As EventArgs) 
    Dim LibDS As DataSet = New DataSet /// local to this sub 

你怎麼能在另一個SUB UserAcceptedRole()

ActualRole = LibDS.Tables(0).Rows(0)("Role").ToString 
訪問此10

最佳方法是將角色作爲參數傳遞。

相關問題