ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录

Posted

技术标签:

【中文标题】ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录【英文标题】:ASP.NET - VB.NET - Retrieving record from MS-Access database 【发布时间】:2012-03-26 15:05:15 【问题描述】:

我正在尝试从 MS-Access 数据库中检索记录数据并将其存储到变量中。

我正在使用这个 SQL 命令来查询数据库:

Dim cmdRead As OleDbCommand = New OleDbCommand("SELECT UserID FROM [User] where Username=?", conn)

如何在 VB.NET 中从 UserID 列(在 db 中)读取数据并将其存储到 VB.NET 中的变量中?

我基本上想要做的是检索用户 ID,以便我可以从同一个表中检索用户的姓名和姓氏。

注意:我将 ASP.NET 与 Web Develop 2003 和 MS-Access 2003 db 一起使用。

这是完整的代码:

  Imports System.Data.OleDb

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub btnLogin_Click(sender As Object, e As System.EventArgs) Handles btnLogin.Click

        Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Brian\Documents\Visual Studio 2010\WebSites\WebSite3\db.mdb;")


        Dim cmd As OleDbCommand = New OleDbCommand("SELECT Username, Password FROM [User] where Username=? and Password=?", conn)

        cmd.Parameters.AddWithValue("@Username", txtUsername.Text)
        cmd.Parameters.AddWithValue("@Password", txtPassword.Text)


        Try
            conn.Open()
            Dim read As OleDbDataReader = cmd.ExecuteReader()
            If read.HasRows Then
                While read.Read()
                    If txtUsername.Text = read.Item("username").ToString And txtPassword.Text = read.Item("password").ToString Then

                        Dim tID As Long = read.Item("UserID").ToString
                        Dim tName As String = read.Item("CustomerName").ToString
                        Dim tSurname As String = read.Item("CustomerSurname").ToString

                        lblLogged.Text = lblLogged.Text + tName + tSurname

                        lblLogged.Visible = True
                    End If
                End While
            Else
                lblLogged.Text = "Login unsuccessful"
            End If

            read.Close()
        Catch ex As Exception
            Response.Write(ex.Message())

        Finally
            conn.Close()
        End Try


    End Sub

End Class

【问题讨论】:

您目前是否遇到错误? 不,不。它工作正常。我想要的是添加代码来检索用户 ID、姓名和姓氏,而不是插入。 【参考方案1】:

这应该放在你的 Try 块中

conn.Open()             
Dim read As OleDbDataReader = cmd.ExecuteReader()             
If read.HasRows Then              
    While read.Read()             
        If txtUsername.Text = read.Item("username").ToString And txtPassword.Text = read.Item("password").ToString Then                
            Dim tID as long = read.Item("UserID").ToString
        Else                 
            lblLogged.Text = "Login unsuccessful"             
        End If   
    End While           
End If   

在 finally 块中

read.Close()

【讨论】:

读取字段的代码必须放在 .HasRows if 语句中,然后您需要一个循环来遍历记录。如果找到它,它会将 UserID 字段分配给变量 tID(在此处本地声明,但您希望它在类级别,或者只是将其分配给某处的字段)。【参考方案2】:

在您的示例中出现了问题。请试试这个。

首先更改 OleDbCommand 以检索用户 ID,当您从同一个表中读取时不需要第二个命令,我认为 UserName 和 Password 标识一个唯一用户

Dim cmd As OleDbCommand = New OleDbCommand("SELECT UserID, Username, Password FROM [User] where Username=? and Password=?", conn) 

然后添加你的参数并查询数据库

Try             
     conn.Open()
     Dim read As OleDbDataReader = cmd.ExecuteReader()             
     If read.HasRows Then              
         read.Read()
         ' Now you can read the Item and pass the values to your textboxes             
         txtUsername.Text = read.Item("username").ToString 
         txtPassword.Text = read.Item("password").ToString 
         txtUserID.Text = read.Item("userid").ToString  
     Else                 
          lblLogged.Text = "Login unsuccessful"             
     End If              
     read.Close()         
Catch ex As Exception             
     Response.Write(ex.Message())          
Finally             
     conn.Close()         
 End Try 

【讨论】:

抱歉,误删了! 如何从困难的表中获取数据?来自用户 ID、姓名和姓氏? 嘿坦克的代码。我更新了代码以向您展示我到目前为止所做的事情。我的意思是,如果用户名是“jdoe”,VB SQL 查询将搜索匹配“jdoe”的用户 ID,并从表中检索姓名和姓氏。我更新了到目前为止所做的代码,但是当我尝试“登录”时,所有 lblLogged.Text 输入都是“UserID” 您只能读取您在 select 语句中放入的列。如果此列在同一个表“用户”上,您所要做的就是更改 SELECT UserID, CustomerName, CustomerSurName ..... etc

以上是关于ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录的主要内容,如果未能解决你的问题,请参考以下文章

用C#编写的asp.net 和 vb.net编写的asp.net 有性能上的差异吗?

如何使用 dotnet cli 命令以 VB.NET 语言创建 ASP.NET Core 项目?

PDF 生成后无法打开 (vb.net) (asp.net)

ASP.NET 登录以授予对特定类型人群的访问权限

ASP.NET - VB.NET - 更新 MS_Access 表

从 vb.NET (2003) 迁移到 vb2005 都有哪些好处?