2012-03-26 65 views
1

我用一個函數從Access數據庫數據導入到SQL服務器:訪問導入到SQL服務器不導入第一行

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

我注意到它不是導入每個表的第一個記錄,任何人都可以幫助注意爲什麼以及如何解決?但願這只是第一行...

回答

0

你不應該需要

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

而你只需要更換與

 bulkCopy.WriteToServer(dr); 

WriteToServer方法

將提供的IDataReader中的所有行復制到由DestinationTableName指定的目標表 SqlBulkCopy 對象的屬性。

但是你已經叫讀過的第一行了讀者和先進的IDataReader到下一個記錄dr.Read()(所以它不是給WriteServer方法訪問)。