SqlBulkCopy - внешняя таблица не в ожидаемом формате - PullRequest
0 голосов
/ 07 июня 2011

Я пытаюсь использовать SqlBulkCopy в соответствии с примером в Импорт данных электронной таблицы Excel в таблицу базы данных SQL Server с помощью SqlBulkCopy .

Я создалтаблица и таблица Excel в порядке, кодирование выполнено, но я продолжаю получать

Внешняя таблица не соответствует ожидаемому формату.

в строке connection.open().

Как мне избавиться от этой проблемы?

    // Connection String to Excel Workbook
    String savePath = @"C:\TEMP\";

    String fileName = "upload.xls";
    savePath += fileName;
    //newpath += fileName;
    FileUpload1.SaveAs(savePath);

    string excelConnectionString =
        "Provider=Microsoft.Jet.OLEDB.4.0;" +
        "Data    Source=" + savePath + ";" +
        "Extended Properties=Excel 8.0;";

    // Create Connection to Excel Workbook
    using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
    {
        OleDbCommand command = new OleDbCommand("Select ID,Data FROM [Data$]", connection);

        connection.Open();

        // Create DbDataReader to Data Worksheet
        using (DbDataReader dr = command.ExecuteReader())
        {
            // SQL Server Connection String
            string sqlConnectionString = "Data Source=GRACC011334\\SQLEXPRESS;Initial Catalog=ComputerBroadcastNetwork;Integrated Security=True";

            // Bulk Copy to SQL Server
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
            {
                bulkCopy.DestinationTableName = "ExcelData";
                bulkCopy.WriteToServer(dr);
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 23 января 2013

Для меня эта ошибка была вызвана попыткой массового копирования из электронной таблицы в более новом формате .xlsx.После того, как я преобразовал электронную таблицу в более старый формат .xls, я смог сделать копию, не получив сообщение об ошибке.

Я использую ту же строку подключения, которую вы указали выше, с

Provider = Microsoft.Jet.OLEDB.4.0 и Расширенные свойства = Excel 8.0

Так что, очевидно, .xlsxфайлам нужен другой поставщик и / или расширенные свойства

0 голосов
/ 08 июня 2011

Я понял.Мне пришлось изменить формат строки подключения и изменить его на

string excelConnectionString = (@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\TEMP\Book1.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1'"); 
...