2009-12-05 3 views
2

Я пытаюсь записать данные с листа расширенного расширения в базу данных SQL. Я смог подключиться к электронной таблице Excel и прочитать данные, но мне не удается получить данные для вставки в таблицу SQL DB.import excel to sql db table

текущий код выглядит следующим образом

любая помощь наиболее ценится.

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. Если вы создали необходимые ссылки в ACCESS, тогда просто запустить SQL-запрос INSERT INTO.

Но я думаю, что вы, возможно, могли бы сделать это без ACCESS - так как вы можете заставить 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

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 

спасибо за вашу помощь