Thông tin

Insert dữ liệu từ file Excel sang CSDL access

Trao đổi về việc sử dụng sử dụng công nghệ ADO.NET để thao tác với CSDL, sử dụng các controls giúp hiện dữ liệu (GridView, Repeater,..) và các control lưu trữ nguồn dữ liệu (ObjectDataSource, SqlDataSource,…)

Điều hành viên: tungcan5diop

Insert dữ liệu từ file Excel sang CSDL access

Gửi bàigửi bởi dinhquyhcct » T.Bảy 24/07/2010 9:04 pm

Mình đang viết chương trình cần Insert dữ liệu từ file Excel vào CSDL access. Mục đích là để nhập cho nhanh đó mà. Mình dùng ADO net lấy dữ liệu file excel vào DataSet (ds1), lấy dữ liệu CSDL access vào DataSet (ds2) rồi add từng dòng dữ liệu của (ds1) sang (ds2), sau đó dùng oledbCommandBuilder dể update ds2. Nhưng khi chạy chương trình bị lỗi tại dòng da.Update(ds2.Tables(0)). Lỗi:Syntax error in INSERT INTO statement.
Nhờ các bạn giúp sữa lỗi hoàn thiện cho chương trình.
Mình gữi kèm theo chương trình. (chương trình mình dùng VB 2008)
convert Excell.rar
Convert Excell to access
(80.51 KiB) Đã tải về 59 lần.
dinhquyhcct
Thành viên chính thức
Thành viên chính thức
 
Bài viết: 10
Ngày tham gia: T.Năm 10/04/2008 10:05 am

Re: Insert dữ liệu từ file Excel sang CSDL access

Gửi bàigửi bởi ngocvinh » CN 25/07/2010 9:57 am

Bạn tham khảo cách của mình cho nhanh mình chay thử 22000 dong trong vong 40s CPU Pentium E2160 .Minh nghi ban sẽ làm được
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 'Import data to sql
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer
        If CBOworkoder.Text = "" Then
            MsgBox("Chua co work oder")
            Exit Sub
        End If
        Try


            OpenFile.Filter = "Excel (*.xls)|*.xls|All files (*.*)|*.*"
            OpenFile.ShowDialog()
            Dim F As String = OpenFile.FileName.ToString()
            If F = "" Then
                Exit Sub
            End If
            'Dim excelConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & F & ";Extended  Properties=""Excel 11.0;HDR=YES;"""
            Dim excelConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & F & ";Extended Properties=Excel 8.0;" & "Persist Security Info=False"

            Dim da As New OleDbDataAdapter
            tam = New DataTable
            Dim Connection As New OleDbConnection
            Connection.ConnectionString = excelConnectionString
            Connection.Open()
            'MsgBox("OK")
            Dim Command1 As New OleDbCommand("Select Data FROM [Sheet1$]", Connection)
            da.SelectCommand = Command1
            da.Fill(tam)
            MsgBox("Số dòng cần Import vào là " & tam.Rows.Count, , "Thông báo")
        Catch ex As Exception
            MsgBox(ex.ToString)
            'MsgBox("File không chứa dữ liệu như yêu cầu ", , "Thông báo")
            Exit Sub
        End Try
        Try
            Command = New SqlCommand
            Command.Connection = dbs
            For i = 0 To tam.Rows.Count - 1
                Command.CommandText = " insert into WAREHOUSE(WORK_ODER,SERIAL_NUMBER,OPERATOR,DATE) values( '" & CBOworkoder.Text & "','" & tam.Rows(i)("Data") & "','" & user & "','" & Now() & "')"
                Command.ExecuteNonQuery()
            Next
            MsgBox("Done")
        Catch ex As Exception
            'MsgBox(ex.ToString)
            MsgBox("Data bị trùng lặp Chương trình sẽ dừng tại dòng: " & tam.Rows(i)("Data"), , "Thông báo")
        End Try
    End Sub
Parsed in 0.028 seconds, using GeSHi 1.0.8.4
ngocvinh
Thành viên tích cực
Thành viên tích cực
 
Bài viết: 118
Ngày tham gia: T.Tư 23/04/2008 8:14 am
Đến từ: Biên Hòa Đồng Nai

Re: Insert dữ liệu từ file Excel sang CSDL access

Gửi bàigửi bởi ngocvinh » T.Hai 26/07/2010 8:06 am

Trong CSDL File Access cot 'DAY' sửa tên lại thành tên khác đi vì trùng với tên hệ thống là 'Ngày' nên không Update được .Có hai cách Import bên dưới đều chạy được mình đả Tets trên vs2005,bạn nên kiễm tra tên colurm trong bảng Access
Syntax: [ Download ] [ Hide ]
Using vbnet Syntax Highlighting
 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        ' If (ds1.Tables(0).Rows.Count < 1) Then
        'MsgBox("co gi dau ma nhap")
        ' Exit Sub
        ' End If
        ' Dim mAccessFile As String = Application.StartupPath & "\DBPHIT.mdb"
        ' conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mAccessFile & ";")
        ' conn.Open()
        ' Command.Connection = conn
        ' i = 0
        ' For i As Integer = 0 To ds1.Tables(0).Rows.Count - 1
        'Command.CommandText = " insert into PHIT(TT,KH,SHD,DCHI,SHO,LT,PHIEN,MANG,MATBA,SOCT,LOAICT,GIA,PHA,[DAY],I,V,NSX) values( '" & ds1.Tables(0).Rows(i)("TT") & "' ,'" & ds1.Tables(0).Rows(i)("KH") & "','" & ds1.Tables(0).Rows(i)("SHD") & "','" & ds1.Tables(0).Rows(i)("DCHI") & "','" & ds1.Tables(0).Rows(i)("SHO") & "','" & ds1.Tables(0).Rows(i)("LT") & "','" & ds1.Tables(0).Rows(i)("PHIEN") & "','" & ds1.Tables(0).Rows(i)("MANG") & "','" & ds1.Tables(0).Rows(i)("MATBA") & "','" & ds1.Tables(0).Rows(i)("SOCT") & "','" & ds1.Tables(0).Rows(i)("LOAICT") & "','" & ds1.Tables(0).Rows(i)("GIA") & "','" & ds1.Tables(0).Rows(i)("PHA") & "','" & ds1.Tables(0).Rows(i)("DAY") & "','" & ds1.Tables(0).Rows(i)("I") & "','" & ds1.Tables(0).Rows(i)("V") & "','" & ds1.Tables(0).Rows(i)("NSX") & "') "
        ' TextBox1.Text = i
        'Command.ExecuteNonQuery()
        ' Next
        ' Dim sql = "Select * from PHIT"
        ' Command.CommandText = sql
        ' da = New OleDbDataAdapter
        ' da.SelectCommand = Command
        ' da.Fill(TB1) 'TB1 as Datatable
        '  Me.DataGridView2.DataSource = TB1

        If DataGridView1.RowCount = 0 Or DataGridView2.RowCount = 0 Then
            MsgBox("Chua mo csdl ")
            Exit Sub
        End If
        For Each dr As DataRow In ds1.Tables(0).Rows
            Dim drnew As DataRow = ds2.Tables(0).NewRow
            For i As Integer = 0 To ds1.Tables(0).Columns.Count - 1
                drnew.Item(i) = dr.Item(i)
            Next
            ds2.Tables(0).Rows.Add(drnew)
        Next

        Me.DataGridView2.DataSource = ds2
        ' Me.DataGridView2.DataMember = "TablePHIT"
        da.Update(ds2.Tables(0))
        TextBox1.Text = ds2.Tables(0).Rows.Count
    End Sub
 
Parsed in 0.021 seconds, using GeSHi 1.0.8.4
ngocvinh
Thành viên tích cực
Thành viên tích cực
 
Bài viết: 118
Ngày tham gia: T.Tư 23/04/2008 8:14 am
Đến từ: Biên Hòa Đồng Nai

Re: Insert dữ liệu từ file Excel sang CSDL access

Gửi bàigửi bởi dinhquyhcct » T.Tư 28/07/2010 10:14 am

Rất cám ơn ý kiến đóng góp nhiệt tình của bạn ngocvinh. Mình đã sữa lại và chương trình chạy tốt rồi.
dinhquyhcct
Thành viên chính thức
Thành viên chính thức
 
Bài viết: 10
Ngày tham gia: T.Năm 10/04/2008 10:05 am


Quay về ADO.Net & Data Presentation Controls

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách.