2009-12-05 122 views
2

我想從Excel電子表格寫入數據到SQL數據庫。我已經能夠連接到Excel電子表格並讀取數據,但我無法將數據插入到SQL數據庫表中。導入Excel到SQL數據庫表

當前代碼如下

任何幫助最受讚賞。

Dim plmExcelCon As System.Data.OleDb.OleDbConnection 
    Dim ldExcelDS As System.Data.DataSet 
    Dim cmdLoadExcel As System.Data.OleDb.OleDbDataAdapter 
    Dim PrmPathExcelFile As String 
    PrmPathExcelFile = txtImportFileLocation.Text.ToString 

    plmExcelCon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + ";Extended Properties=Excel 12.0;") 
    cmdLoadExcel = New System.Data.OleDb.OleDbDataAdapter("select * from [" + txtImportSheetName.Text + "$]", plmExcelCon) 
    ldExcelDS = New System.Data.DataSet 
    cmdLoadExcel.Fill(ldExcelDS) 

    dgvImportData.DataSource = ldExcelDS.Tables(0) 

    plmExcelCon.Close() 


    cmdINSERT.Parameters("@[SQL COLUMN NAME]").Value = [Not sure how to set value from datagrid view] 


    cnLD.Open() 
    cmdINSERT.ExecuteNonQuery() 
    cnLD.Close() 

回答

0

我不確定您的代碼是否能夠正常工作。但我認爲還有更好的辦法可以解決這個問題。

當我做了這樣的東西,我已經使用ACCESS作爲數據容器 - 可以將ACCESS鏈接到EXCEL數據和ODBC源。如果您已經創建了訪問所需的鏈接是那麼簡單的事情來運行一個INSERT INTO SQL查詢

但我想你也許可以做到這一點,而不訪問 - 你可以讓VBA以爲EXCEL是一個ODBC源 - 所以你大概可以直接從VBA建立所有連接。

Microsoft支持網站上有文檔解釋語法和方法。

1

我的任務是從Excel中提取一些數據,修改它,並將其放入SQL數據庫中。下面是類似於我所做的事情:

Dim MyConnection As New System.Data.OleDb.OleDbConnection 

    Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 
    MyConnection = New System.Data.OleDb.OleDbConnection ("provider=Microsoft.Jet.OLEDB.4.0; data source='" + fileLocation + " ';Extended Properties=Excel 8.0;") 

    ' Select the data from the 'Samples' sheet of the workbook. 
    MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Samples$]", MyConnection) 
    Dim ds as new DataSet 
    MyCommand.Fill(ds) 

    MyConnection.Close() 

這幾乎是你已經和你說的工作從Excel拉數據。從那裏,我將通過DataSet只是想迭代,並將其添加到數據庫中這樣說:

Dim dt as DataTable = ds.Tables(0) 
    For each row as DataRow in dt.Rows 
     dim value1 as String = row("columnName") 
     dim value2 as Double = row("columnName2") 

     'Write a function that connects to the database with your parameters 
     insertIntoDatabase(value1, value2) 
    Next 

希望這是你所需要的橋(acessing一個DataTable的數據)。祝你好運!

+0

什麼cmdInsert和impEID變量?他們如何申報? – phill 2010-11-01 19:44:04

0

我終於得到它用下面的代碼

Dim plmExcelCon As New System.Data.OleDb.OleDbConnection 
    Dim cmdLoadExcel As System.Data.OleDb.OleDbDataAdapter 
    Dim PrmPathExcelFile As String 

    PrmPathExcelFile = txtImportFileLocation.Text.ToString 

    plmExcelCon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PrmPathExcelFile + ";Extended Properties=Excel 12.0;") 

    cmdLoadExcel = New System.Data.OleDb.OleDbDataAdapter("select * from [" + txtImportSheetName.Text + "$]", plmExcelCon) 

    Dim dt As System.Data.DataTable 

    dt = New System.Data.DataTable 

    cmdLoadExcel.Fill(dt) 

    plmExcelCon.Close() 

    For Each row As DataRow In dt.Rows 
     Dim impEID As String = row(txtImportEID.Text) 
     Dim impVID As String = row(txtImportVID.Text) 

    Try 

      cmdINSERT.Parameters("@pldLifeDataEID").Value = impEID 
      cmdINSERT.Parameters("@pldLifeDataVID").Value = impVID 
      cmdINSERT.Parameters("@pldLifeDataDateEntry").Value = Date.Now 

      cnLD.Open() 
      cmdINSERT.ExecuteNonQuery() 
      cnLD.Close() 

     Catch ex As Exception 
      MessageBox.Show(ErrorToString) 
     End Try 
    Next 

感謝您的工作有所幫助