Доступ к импорту на SQL-сервер без импорта первой строки - PullRequest
1 голос
/ 26 марта 2012

Я использую функцию для импорта данных из базы данных доступа на 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();
        }
    } 

Я заметил, что это не импорт первой записи каждой таблицы, может кто-нибудь помочь заметить, почему и как исправить?Надеюсь, это только первый ряд ...

1 Ответ

0 голосов
/ 26 марта 2012

Вам не нужно

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

И вам просто нужно заменить его на

     bulkCopy.WriteToServer(dr);

WriteToServer метод

Копирует все строки в предоставленном IDataReader в таблицу назначения, указанную свойством DestinationTableName объекта SqlBulkCopy.

Но dr.Read () , который вы вызвалипрочитал первую строку из Reader и перевел IDataReader к следующей записи (поэтому он не доступен для метода WriteServer).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...