2009-12-05 5 views
2

J'essaie d'écrire des données à partir d'une feuille de calcul Excel dans une base de données SQL. J'ai pu me connecter à la feuille de calcul Excel et lire les données mais je suis incapable d'obtenir les données à insérer dans la table DB SQL.Importer excel to sql db table

le code actuel est le suivant

toute aide les plus appréciés.

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() 

Répondre

0

Je ne suis pas sûr si le code que vous avez est capable de fonctionner. Mais je pense qu'il y a une meilleure façon d'y arriver. Lorsque j'ai fait ce genre de choses, j'ai utilisé ACCESS comme conteneur de données - il est possible de lier ACCESS aux données EXCEL et aux sources ODBC. Si vous avez créé les liens requis dans ACCESS, il est alors simple d'exécuter une requête INSERT INTO SQL

Mais je pense que vous pourriez probablement le faire sans ACCESS - comme vous pouvez le faire, VBA pense que EXCEL est une source ODBC - donc vous pouvez probablement faire toutes les connexions directement à partir de VBA.

Il existe des documents sur le site de support de Microsoft expliquant la syntaxe et les méthodes.

1

J'ai été chargé d'extraire des données d'Excel, de les modifier et de les mettre dans une base de données SQL. Voici quelque chose de semblable à ce que je faisais:

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() 

C'est à peu près ce que vous avez déjà, et vous avez dit que travaille pour extraire les données à partir d'Excel. De là, je voudrais juste itérer le DataSet et l'ajouter à la base de données de cette façon:

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 

Espérons que c'est le pont dont vous avez besoin (acessing données d'un DataTable). Bonne chance!

+0

quelles sont les variables cmdInsert et impEID pour? comment sont-ils déclarés? – phill

0

J'ai enfin eu à travailler avec le code suivant

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 

Merci pour votre aide