• Thứ Ba, 22/03/2011 08:19 (GMT+7)

    Lập trình VB.NET, import dữ liệu từ Excel vào SQL Server 2005

    Câu hỏi :

    Lập trình VB.NET 2005 kết nối CSDL là SQL Server 2005 tôi gặp trường hợp bất thường như sau: Nếu cập nhật số lượng bản ghi ít (dưới 300) thì chạy tốt, nhưng khi cập nhật một lúc từ 400 bản ghi từ chương trình trở lên thì server không nhận được. Nếu Import dữ liệu từ file Excel có từ 1000 bản ghi trở lên vào trực tiếp một bảng trong CSDL của SQL Server2005 thì chỉ được tối đa 700 bản ghi.



    Trả lời :

    Bạn không cho biết cụ thể đoạn chương trình VB .Net để thực hiện chức năng cập nhật các record trong database được quản lý bởi SQL Server 2005, bạn cũng không cho biết cụ thể đoạn chương trình "export" dữ liệu trong bảng tính Excel sang bảng dữ liệu của SQL Server nên chúng tôi không thể chỉ ra chính xác dòng lệnh nào gây lỗi. Lưu ý, SQL Server 2005 là một hệ quản trị cơ sở dữ liệu khá mạnh và được dùng khá phổ biến, nó có thể quản lý hàng triệu record trong mỗi bảng dữ liệu, do đó nguyên nhân không cập nhật được trên 300 record hay không "export" được trên 700 record từ Excel chắc chắn là do đoạn lệnh của bạn viết. Sau đây chúng tôi giới thiệu qui trình điển hình để viết 1 ứng dụng VB .Net nhỏ, nó tạo tự động 1 worksheet Excel chứa 10000 record, rồi "export" thành công 10000 record này sang 1 bảng dữ liệu trên SQL Server 2005:

    1. Chạy Visual Studio 2005, chọn menu File.New Project để hiển thị cửa sổ New Project.

    2. Trong cây Project Types, mở rộng mục Visual Basic.Windows, chọn icon Windows Application, nhập tên Project (td. VBTransTable), nhấn OK để tạo Project ứng dụng theo các thông số vừa đặc tả.

    3. Khi cửa sổ thiết kế form ứng dụng trống hiển thị, chọn menu View.Code để hiển thị cửa sổ soạn thảo mã nguồn cho form.

    4. Chọn menu Project.Add Reference để hiển thị cửa sổ Add reference, chọn tab COM, duyệt tìm và chọn mục Microsoft Excel xx.0 Object Library và nhấn OK để "add" thư viện truy xuất các đối tượng Excel vào project ứng dụng.

    5. Chọn lại menu Project.Add Reference để hiển thị cửa sổ "dd reference, chọn tab COM, duyệt tìm và chọn mục"Microsoft ActiveX Data Object 2.x Library và nhấn OK để "add" thư viện ADO truy xuất database vào project ứng dụng.

    6. Viết code cho class Form1 như sau:

    'mã nguồn của class Form1
    Public Class Form1
    Dim ExcelGlobal_definst As New Excel.Global
    'thủ tục khởi tạo form
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'tạo thử worksheet Excel chứa 10000 record
    CreateWS()
    'export worksheet Excel sang bảng SQL Server
    ExportWS()
    End Sub

    'thủ tục tạo thử worksheet Excel chứa 10000 record
    Sub CreateWS()
    Dim i As Object
    Dim rg As Object
    Dim ExcelApp As Excel.Application
    Dim Workbook As Excel.Workbook
    'tạo ứng dụng Excel
    ExcelApp = New Excel.Application
    'tạo workbook Excel
    Workbook = ExcelApp.Workbooks.Add
    'tạo worksheet mới
    ExcelApp.Sheets.Add()
    'đặt tên cho worksheet mới
    ExcelApp.ActiveSheet.Name = "MyData"
    'thiết lập vùng cell cần xử lý
    rg = ExcelGlobal_definst.Range("A1:C10001")
    'xuất hàng header có 2 cột
    rg.Cells(1, 1).Value = "STT"
    rg.Cells(1, 2).Value = "Ho ten"
    'lặp xuất từng hàng dữ liệu giả
    For i = 2 To 10001
    rg.Cells(i, 1).Value = i - 1
    rg.Cells(i, 2).Value = "Toi ten la " & (i - 1)
    Next i
    'lưu kết quả ra file
    ExcelApp.ActiveWorkbook.SaveAs("c:\MyData.xls")
    'dừng ứng dụng Excel
    ExcelApp.Quit()
    ExcelApp = Nothing
    End Sub

    'thủ tục tạo thử worksheet Excel chứa 10000 record
    Sub ExportWS()
    Dim cn As ADODB.Connection
    Dim strSQL As String
    Dim lngRecsAff As Integer
    'tạo đối tượng Connection
    cn = New ADODB.Connection
    cn.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\MyData.xls; Extended Properties=Excel 8.0")
    'chuyển worksheet Excel sang bảng SQL Server
    strSQL = "SELECT * INTO [odbc;Driver={SQL Server};" & "Server=HIEPCOMP\SQLEXPRESS;Database=tempdb;" & "UID=sa;PWD=luonghoa].MyData FROM [MyData$]"
    cn.Execute(strSQL, lngRecsAff, ADODB.ExecuteOptionEnum.adExecuteNoRecords)
    cn.Close()
    cn = Nothing
    End Sub
    End Class

    7. Chọn menu Debug.Start Debugging để dịch và chạy ứng dụng, nếu bạn tuân thủ đúng các bước ở trên thì ứng dụng sẽ chạy, thời gian tạo worksheet Excel chứa 10000 record khá lâu, bạn hãy kiên nhẫn chờ. Khi nào thấy cửa sổ ứng dụng hiển thị thì lúc đó chương trình đã chuyển xong toàn bộ 10000 record từ Excel sang bảng có tên là MyData trong database tempdb do SQL Server quản lý.

    8. Chạy tiện ích truy xuất database của SQL Server (thí dụ SQL Server Management Studio Express), xem thử bảng dữ liệu MyData trong database tempdb, bạn sẽ thấy đủ 10000 record y như trong bảng tính Excel gốc.

    Chuyên mục: Lập trình