2016-12-04 6 views
-3

Ich versuche eine Methode zu verwenden, die ich aus CodePlex gezogen habe, die Daten aus Excel in eine SQL-Tabelle exportiert. Ich habe einige kleinere Codeanpassungen vorgenommen, aber ich kann immer noch nicht die Daten importieren. Sieht irgendjemand irgendwas mit meiner Syntax eklatant? Vielen Dank.C# Excel-Daten in SQL importieren Tabelle

static void Main(string[] args) 
     { 
      importdatafromexcel("C:/Users/usname/Desktop/TestDirectories/FileSystemWatcher/Test_123.xlsx"); 
     } 

public static void importdatafromexcel(string excelfilepath) 
     { 
      //declare variables - edit these based on your particular situation 
      string ssqltable = "Name"; 
      // make sure your sheet name is correct, here sheet name is sheet1, so you can change your sheet name if have different 

      string myexceldataquery = "select Name,EmployeeID from [sheet1$]"; 
      try 
      { 
       //create our connection strings 
       string sexcelconnectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;data source=" + excelfilepath + ";Extended Properties=" + "\"excel 8.0;hdr=yes;\""; 

       //MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelfilepath + ";Extended Properties=Excel 8.0;HDR=YES'"); 

       string ssqlconnectionstring = "server=DESKTOP-6CIMC97;Initial Catalog=TestDB;integrated security=true;connection reset = false"; 

       //<add name="ProductContext" connectionString="Server=DESKTOP-6CIMC97; Initial Catalog=ProductApps; Integrated Security=True" providerName="System.Data.SqlClient" /> 

       //execute a query to erase any previous data from our destination table 
       string sclearsql = "delete from " + ssqltable; 
       SqlConnection sqlconn = new SqlConnection(ssqlconnectionstring); 
       SqlCommand sqlcmd = new SqlCommand(sclearsql, sqlconn); 
       sqlcmd.Connection.Open(); 
       sqlcmd.ExecuteNonQuery(); 
       sqlconn.Close(); 

       //series of commands to bulk copy data from the excel file into our sql table 
       OleDbConnection oledbconn = new OleDbConnection(sexcelconnectionstring); 
       OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oledbconn); 
       oledbconn.Open(); 
       OleDbDataReader dr = oledbcmd.ExecuteReader(); 
       SqlBulkCopy bulkcopy = new SqlBulkCopy(ssqlconnectionstring); 
       bulkcopy.DestinationTableName = ssqltable; 
       bulkcopy.WriteToServer(dr); 
       //while (dr.Read()) 
       //{ 
        // bulkcopy.WriteToServer(dr); 
       //} 

       oledbconn.Close(); 
      } 
      catch (Exception ex) 
      { 
       //handle exception 
      } 
     } 
+0

Sie müssen genauer auf das Verhalten eingehen, das Sie tatsächlich erhalten. Hast du es mit einem Debugger versucht? –

+0

Ich habe es versucht, bin aber neu im Programmieren und nicht das Beste mit den Breakpoints. Ich habe eins zur Excel-Verbindung und eins zur eigentlichen Methode in Main hinzugefügt, aber ich sehe keine Fehler, wenn ich den Mauszeiger halte, nachdem es unterbrochen wurde. Wenn ich den Code ausführe, öffnet sich die Konsolen-App und schließt sich nach etwa einer Sekunde, als wäre sie erfolgreich, aber wenn ich die Tabelle überprüfe, sind keine Daten vorhanden. – AndrewC10

+0

Das sieht nach einer Möglichkeit aus, Debuggen zu lernen :-) Versuchen Sie, Ihre eigene Leserschleife zu erstellen, um zu sehen, ob die Daten tatsächlich aus der Quelltabelle gelesen werden können. Legen Sie manuell zufällige Daten in die Tabelle 'Name', um zu sehen, ob sie zumindest gelöscht werden. Validiere einfach jeden Schritt des Gesamtprozesses. –

Antwort

1

Das Problem ist hier:

while (dr.Read()) 
{ 
    bulkcopy.WriteToServer(dr); 
} 

Der while (dr.Read()) Block ist nützlich, wenn Sie über die Ergebnisse one-by-one iterieren.

Aber es ist nicht Sie, der über die Ergebnisse iteriert. Sie möchten, dass die Massenkopieroperation die Iteration ausführt.

Ersetzen Sie einfach mit

bulkcopy.WriteToServer(dr); 
+0

Vielen Dank für die Antwort. Ich habe meine while-Anweisung auskommentiert und den Bulkcopy-Befehl nach oben verschoben, wie im obigen Code gezeigt. Es scheint immer noch nicht importieren zu wollen. Ich mache mir Sorgen um etwas in einer der Verbindungszeichenfolgen. Der Datenbankname ist TestDB und die Tabelle ist Name. Danke nochmal für die Hilfe. – AndrewC10

0

Dies sollte für Sie arbeiten.

private void SaveFileToDatabase(string filePath) 
{ 
    String strConnection = "Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\Hemant\\documents\\visual studio 2010\\Projects\\CRMdata\\CRMdata\\App_Data\\Database1.mdf';Integrated Security=True;User Instance=True"; 

    String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath); 
    //Create Connection to Excel work book 
    using (OleDbConnection excelConnection = new OleDbConnection(excelConnString)) 
    { 
     //Create OleDbCommand to fetch data from Excel 
     using (OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]", excelConnection)) 
     { 
      excelConnection.Open(); 
      using (OleDbDataReader dReader = cmd.ExecuteReader()) 
      { 
       using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection)) 
       { 
        //Give your Destination table name 
        sqlBulk.DestinationTableName = "Excel_table"; 
        sqlBulk.WriteToServer(dReader); 
       } 
      } 
     } 
    } 
} 


private string GetLocalFilePath(string saveDirectory, FileUpload fileUploadControl) 
{ 


    string filePath = Path.Combine(saveDirectory, fileUploadControl.FileName); 

    fileUploadControl.SaveAs(filePath); 

    return filePath; 

} 

Weitere Informationen finden Sie unter den folgenden Links.

https://www.codeproject.com/tips/636719/import-ms-excel-data-to-sql-server-table-using-csh

http://www.c-sharpcorner.com/UploadFile/0c1bb2/inserting-excel-file-records-into-sql-server-database-using/

Wie Sie sehen können, gibt es viele Möglichkeiten zu tun, was Sie tun möchten.

Verwandte Themen