如何检查Access数据库中是否存在记录

Ric*_*lli 1 database vb.net oledb ms-access login

我正在为我正在研究的项目尝试一种新方法,我刚开始学习Access数据库.我使用VB.net,我的问题是:如何查看数据库表中是否存在记录.我以为我明白了,但事实并非如此.我正在创建一个登录名,我希望它在尝试比较您输入的内容与数据库中的内容之前检查他们输入的用户名是否存在.我看到很多关于如何做到这一点的问题......但是对于VB.net MS Access没有

这是我的代码:

Imports System.Data.OleDb
Public Class LoginForm1
    Dim provider As String
    Dim dataFile As String
    Dim connString As String
    Public myConnection As OleDbConnection = New OleDbConnection
    Public dr As OleDbDataReader
    Dim Errors As String
    Public Sub AccessAccountDatabase()
        provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="
        dataFile = "C:\Users\Richard\Documents\Visual Studio 2010\Projects\CybSol Journal Database\CybSol Journal Database\cgi-bin\Data.mdb"
        connString = provider & dataFile
        myConnection.ConnectionString = connString
        Errors = ""
        Try
            myConnection.Open()
            Dim str As String
            str = "SELECT * FROM Accounts WHERE Username='" & UsernameTxt.Text & "' AND Password='" & PasswordTxt.Text & "'"
            Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
            dr = cmd.ExecuteReader
            dr.Read()

            If UsernameTxt.Text = dr("Username").ToString AndAlso PasswordTxt.Text = dr("Password").ToString Then
                Dim Welcome As String = "SELECT * FROM Accounts WHERE Real_Name=" & "Username"
                MsgBox("Welcome back " & dr("Real_Name") & "!")
            Else
                MsgBox("Login Failure")
            End If
            myConnection.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub OkayBtn_Click(sender As System.Object, e As System.EventArgs) Handles OkayBtn.Click
        AccessAccountDatabase()
    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

所以现在我的问题是......如何检查数据库中是否存在记录,因为当您输入正确的信息(数据库中存在正确的用户名和密码)时,它表示欢迎和所有.但是当您键入错误的用户名和/或密码时,它不起作用.如果没有"Try Catch"语句,程序就会冻结.使用try catch它说明了这一点:

System.InvalidOperationException: No data exists for the row/column.
   at System.Data.OleDb.OleDbDataReader.DoValueCheck(Int32 ordinal)
   at System.Data.OleDb.OleDbDataReader.GetValue(Int32 ordinal)
   at System.Data.OleDb.OleDbDataReader.get_Item(String name)
   at CybSol_Journal_Database.LoginForm1.AccessAccountDatabase() in c:\users\richard\documents\visual studio 2010\Projects\CybSol Journal Database\CybSol Journal Database\LoginForm1.vb:line 36
Run Code Online (Sandbox Code Playgroud)

补充信息:第36行是这样的: If UsernameTxt.Text = dr("Username").ToString AndAlso PasswordTxt.Text = dr("Password").ToString Then

Ste*_*eve 7

第一个问题:

PASSWORD是 Access中的保留关键字.你应该用方括号括起来:

"SELECT * FROM Accounts WHERE Username='" & UsernameTxt.Text & _
"' AND [Password]='" & PasswordTxt.Text & "'" 
Run Code Online (Sandbox Code Playgroud)

第二个问题:

切勿使用字符串连接来创建sql文本.总是使用参数

 str = "SELECT * FROM Accounts WHERE Username=? AND [Password]=?"   
 Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)   
 cmd.Parameters.AddWithValue("user", UserNameTxt.Text)
 cmd.Parameters.AddWithValue("pass", PasswordTxt.Text)
 dr = cmd.ExecuteReader   
Run Code Online (Sandbox Code Playgroud)

为什么?看看如果从用户输入连接字符串会发生什么

第三个问题:测试命令是否返回行

 If dr.Read() Then
    ......

 End if  
Run Code Online (Sandbox Code Playgroud)