[VB.NET] Kết nối ADO.NET

tuhocvba

Administrator
Thành viên BQT
1. Thêm thư viện.
Chuột phải vào project chọn Add.
Bạn cần đăng nhập để thấy đính kèm

Chọn Reference...
Bạn cần đăng nhập để thấy đính kèm

Chọn COM.
Từ khóa tìm kiếm là ADO.
Bạn cần đăng nhập để thấy đính kèm

Bạn nên đặt chuột vào các kết quả tìm kiếm, sẽ có dòng chữ hiện ra. Ở đây mình chọn hai thư viện cho 64bit và 32 bit.
Ấn OK.
2. Code:
Mã:
Private Sub laydulieuExcelADO()
        Dim con As New OleDbConnection()
        Dim cmd As New OleDbCommand()
        Dim da As New OleDbDataAdapter()
        Dim ds As DataSet = New DataSet()
        Dim dt As New DataTable()

        Try
            ' Thiet dinh ket noi DB
            con.ConnectionString =
                "Provider=Microsoft.ACE.OLEDB.12.0; " &
                "Data Source=" &
                Application.StartupPath & "\TuhocVBA.xlsx;" &
                "Extended Properties=""Excel 8.0;HDR=YES;"""

            ' Thiet dinh ket noi
            cmd.Connection = con

            ' Cu phap DQL
            ' Ten sheet trong file Excel "ID"
            cmd.CommandText = "SELECT * FROM [ID$] "

            ' Chay lenh
            da.SelectCommand = cmd



            ' Lay du lieu
            da.Fill(dt)

            'Hien thi du lieu lay duoc
            If dt.Rows.Count > 0 Then
                MessageBox.Show(dt.Rows(0).Item(0))
            Else
                MessageBox.Show _
                    ("File Excel không có dữ liệu")
            End If
            dt.Clear()
            ds.Clear()
            da.Dispose()
            con.Dispose()

        Catch ex As Exception
            ' Loi khong mong muon xay ra
            MessageBox.Show(ex.ToString, "Lỗi không kết nối được với file Excel")

        End Try
    End Sub
Nguồn tham khảo:
 

NhanSu

SMod
Thành viên BQT
@tuhocvba VB.NET thì nên dùng ADO.NET để kết nối, add reference assembly System.Data. Đây là code com addin ADO.NET viết bằng C# truy vấn Excel dùng VSTO, bạn có thể tham khảo.
Mình đã giới thiệu ở .
 
Sửa lần cuối:

vanthanhVBA

Yêu THVBA như điếu đổ
Với office 32bit có lẽ anh phải dùng code này:
Mã:
"Provider=Microsoft.Jet.OLEDB.4.0; "
 

NhanSu

SMod
Thành viên BQT
Mình thường thấy sử dụng Import System.Data, Import System.Data.OleDb (với c# là using). Trong code của mình ở trên kết nối cả xls lẫn xlsx, dùng chung provider.
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
Cái import này thay cho thao tác bằng tay click vô reference ah Nhansu
 

NhanSu

SMod
Thành viên BQT
Đúng rồi, và bạn thử bỏ com - ADO xem, có thể nó gây xung đột.
 

duyhieu61

Yêu THVBA
Theo em biết, nếu bác để là AnyCPU thì khi build ra, nếu Win của bác là Win64 thì nó sẽ ưu tiên build ra 64 dù đã để là AnyCPU, và dẫn tới 32bit không chạy được.
Cách an toàn là bác chọn x86 và build ra bản 32bit. Tương tự cho 64bit. Cách này an toàn nhất.
Về lý thuyết thì cái này:
Mã:
Provider=Microsoft.ACE.OLEDB.12.0
có thể chạy cho cả 64 và 32.
Còn cái này:
Mã:
"Provider=Microsoft.Jet.OLEDB.4.0; "
chỉ chạy cho 32.
Nhưng nếu dùng code 1 thì vẫn có trường hợp 32 chạy không được. Máy báo không tìm thấy Provider. Khi ấy các bác cần cài đặt cái này:
Mã:
https://www.microsoft.com/en-us/download/details.aspx?id=13255
Theo em biết thì máy các bác không cần cài Excel, chỉ cần cài thư viện trên là vẫn đủ để thao tác với Excel bằng ADO.NET, có bác nào kiểm nghiệm chưa, em chỉ nghe nói vậy thôi àh.
Nếu máy các bác đã cài office32 thì cần gỡ ra rồi mới cài cái trên được.

Các bác có thể sửa code, thay Provider trên, để build ra hai bản 32,64. Hoặc viết một hàm kiểm tra xem Office được cài hay chưa, nếu cài rồi thì đang dùng 32 hay 64, rồi từ đó gán Provider tương ứng.
 
Top