2009-12-05 120 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 

感谢您的工作有所帮助