vb.net 中 MS 访问数据库中的行数

Posted

技术标签:

【中文标题】vb.net 中 MS 访问数据库中的行数【英文标题】:count of rows in MS access database in vb.net 【发布时间】:2021-05-04 10:58:02 【问题描述】:

有谁知道怎么回事? 我正在尝试计算 MS 访问数据库中的行数。

这是我尝试过的代码:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim conn As New OleDbConnection
    conn.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Test Database\Database.accdb")
    conn.Open()
    Dim strsql As String
    strsql = "Select count(*) from TABLA"             '" select Panel from PANELS where ID"
    Dim cmd As New OleDbCommand(strsql, conn)
    Dim myreader As OleDbDataReader

    myreader = cmd.ExecuteReader
    myreader.Read()
    PanelsInDatabase = myreader.Item(strsql)
    Label1.Text = PanelsInDatabase
    conn.Close()

    For i As Integer = 0 To PanelsInDatabase - 1
        CreatePanels()
        CreateDeleteButton(_PanelName)
        CreateLabels(_PanelName)
        CreateLabel2(_PanelName)
    Next

End Sub

如果我启动代码,我会得到一个错误:

System.IndexOutOFRangeException

【问题讨论】:

按照建议,如果您想获得单个值,您应该调用ExecuteScalar。也就是说,如果您编写的代码有意义但您的代码没有意义,您可以调用ExecuteReaderExecuteScalar 在内部执行)。您在哪里见过使用包含 SQL 代码的 String 索引数据读取器的示例?你没有。每个示例都使用列的数字索引,那么您为什么希望它以其他方式工作? @jmcilhinney Item 这些天确实需要一个字符串,但你是对的,它会是一个奇怪的 sql 导致它需要一个 sql .. SELECT 1 AS "SELECT 1 AS x FROM t" FROM t 怎么样? :) 【参考方案1】:

我已将您的用户界面代码与您的数据库代码分开。当然,我不知道CreatePanels 在做什么,也不知道_PanelName 是从哪里来的。在您的 UI 代码中,您调用 GetTABLACount 函数,该函数以整数形式返回。

在数据库代码中,使用Using...End Using 块进行连接和命令,以便即使出现错误也能正确处理它们。

由于您只检索单个数据,您可以使用.ExecuteScalar,它返回结果集第一行的第一列作为Object。使用CInt 获取Integer

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim count = GetTABLACount()
    Label1.Text = count.ToString
    For i As Integer = 0 To count - 1
        CreatePanels()
        CreateDeleteButton(_PanelName)
        CreateLabels(_PanelName)
        CreateLabel2(_PanelName)
    Next
End Sub

Private Function GetTABLACount() As Integer
    Dim dbCount As Integer
    Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Test Database\Database.accdb"),
            cmd As New OleDbCommand("Select count(*) from TABLA", conn)
        conn.Open()
        dbCount = CInt(cmd.ExecuteScalar)
    End Using
    Return dbCount
End Function

【讨论】:

非常感谢。你解决了我的问题。 @Lasicak 在 Stack Overflow 上感谢某人的最佳方式是通过单击答案左侧的复选标记(勾号)来接受他们的答案。【参考方案2】:

选择单个值时使用 ExecuteScalar

    Dim connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Test Database\Database.accdb"
    Dim sql = "select count(*) from tabla"        

    Using cmd As New OleDbCommand(sql, New OleDbConnection(connStr))
      cmd.Connection.Open()
      Dim ct = CInt(cmd.ExecuteScalar())

    End Using

【讨论】:

以上是关于vb.net 中 MS 访问数据库中的行数的主要内容,如果未能解决你的问题,请参考以下文章

我无法从 VB.net 的 MS 访问数据库中删除一行

MS SQL 如何查看一个数据库中所有表的行数

带有MS访问数据库作为后端的VB.NET如何通过将数据库文件放入AppData文件夹进行部署?

vb.net 解析查询灵活列名时出错

使用POI读取EXCEL中的数据如何获得表中实际数据的行数?

VB.NET:将 CSV 文件读入二维数组