Search code examples
vb.netms-access

Data retrieval from Access file into DataTable not working


I have some code to connect a database with the program, but for some reason at run time it does not show the data from the DB.

Public Class Form2

Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\employee\employee.accdb")
Dim cmd As New OleDbCommand("", con)
Dim empDA As New OleDbDataAdapter
Dim empTable As New DataTable
Dim dr As OleDbDataReader

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

    Me.EmpTableAdapter.Fill(Me.EmpDataSet.emp)
    Dim cmd As New OleDbCommand("select * from emp", con)
    empDA = New OleDbDataAdapter("select * from emp", con)
    empDA.Fill(empTable)
    DataGridView1.DataSource = empDA
End Sub

Solution

  • The code in the question looks to be a bit muddled as to what needs to be done.

    Variables should be limited to the minimum scope that they are needed in, and some things need to be disposed of after use (to avoid memory leaks, files remaining locked, and other problems with computer resources).

    For the disposal, the Using statement is useful as it makes sure that that is done automatically.

    You should try to put each logical piece of code in a suitably small method so that it is easier to work with. Perhaps something like this:

    Imports System.Data.OleDb
    
    Public Class Form2
    
        Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\employee.accdb"
    
        Sub ShowEmployeeData()
            Dim sql = "SELECT [Id], [FirstName] FROM [Employees] ORDER BY [Id]"
    
            Using conn As New OleDbConnection(connStr)
                Using cmd As New OleDbCommand(sql, conn)
                    Dim employees As New DataTable()
                    Dim da As New OleDbDataAdapter(cmd)
                    da.Fill(employees)
                    DataGridView1.DataSource = employees
                End Using
            End Using
    
        End Sub
    
    
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ShowEmployeeData()
    
        End Sub
    
    End Class
    

    So the connStr variable is available everywhere in the class Form2, and the code that shows the employee data is in its own Sub.

    When querying a database, you should specify the actual columns that you need, so that the columns are returned in the order you want, and order by one of the columns so that the data is returned in a predicatable order - databases are free to give you any order for anything if you don't tell them otherwise.