2012-03-26 3 views
1

Import ich eine Funktion bin mit Daten aus einer Access-Datenbank in SQL Server importieren:Zugang Import in SQL Server nicht in erster Linie

public string importDataFromAccess(string table, string fileName) 
    { 
     OleDbConnection OleDbConn = new OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", fileName)); 
     try 
     { 
      string sSQLTable = table; 
      string myExcelDataQuery = "Select * from " + sSQLTable; 
      string sSqlConnectionString = connStr; 
      string sClearSQL = "DELETE FROM " + sSQLTable; 
      SqlConnection SqlConn = new SqlConnection(sSqlConnectionString); 
      SqlCommand SqlCmd = new SqlCommand(sClearSQL, SqlConn); 
      SqlConn.Open(); 
      SqlCmd.ExecuteNonQuery(); 
      SqlConn.Close(); 

      OleDbCommand OleDbCmd = new OleDbCommand(myExcelDataQuery, OleDbConn); 
      OleDbConn.Open(); 
      OleDbDataReader dr = OleDbCmd.ExecuteReader(); 
      SqlBulkCopy bulkCopy = new SqlBulkCopy(sSqlConnectionString); 
      bulkCopy.DestinationTableName = sSQLTable; 
      while (dr.Read()) 
      { 
       bulkCopy.WriteToServer(dr); 
      } 
      OleDbConn.Close(); 
      return "Done"; 
     } 
     catch (Exception ex) 
     { 
      OleDbConn.Close(); 
      return ex.ToString(); 
     } 
    } 

Ich bemerkte, es ist nicht der erste Datensatz jeder Tabelle zu importieren, kann jemand helfen warum und wie reparieren? Hoffentlich ist es nur die erste Zeile ...

Antwort

0

Sie sollten nicht brauchen die

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

Und Sie brauchen nur das zu ersetzen, mit

 bulkCopy.WriteToServer(dr); 

Die WriteToServer Methode

Kopiert alle Zeilen im bereitgestellten IDataReader in eine Zieltabelle , die von DestinationTableName angegeben wird Eigenschaft des SqlBulkCopy Objekts.

Aber die dr.Read(), dass Sie die erste Zeile aus dem Reader genannt haben, hat und erweiterten die IDataReader zum nächsten Datensatz (so ist es das WriteServer Verfahren nicht zugänglich).

Verwandte Themen