Ошибка при загрузке данных из Excel Sheet в DataTable - PullRequest
1 голос
/ 20 марта 2019
using (OleDbConnection connection = new 
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + ";IMEX=1;Readonly=1;Extended Properties=Excel 8.0;\""))
{
    using (OleDbCommand command = new OleDbCommand(sql, connection))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            dataTable = new DataTable();
            adapter.Fill(dataTable);
        }
    }
}

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

Невозможно обновить.База данных или объект доступны только для чтения.

Кто-то сталкивался с такой же проблемой?

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Попробуйте использовать следующий синтаксис (удалите Text из расширенных свойств, поскольку он используется для импорта файлов CSV):

using (OleDbConnection connection = new 
OleDbConnection(String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"HDR={1};IMEX=1;Readonly=1;Extended Properties=Excel 8.0;\"",pathOnly ,header )))
{
    using (OleDbCommand command = new OleDbCommand(sql, connection))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            dataTable = new DataTable();
            adapter.Fill(dataTable);
        }
    }
}

Если у вас установлен поставщик Office 2007 или более поздней версии, попробуйте использовать поставщика Microsoft.ACE.OLEDB.12.0поскольку он также поддерживает чтение старых форматов Excel.

Если вы пытаетесь импортировать текстовые файлы (csv), то лучше использовать библиотеки синтаксического анализа текста, такие как:

0 голосов
/ 20 марта 2019

ваша строка соединения содержит «Readonly = 1;».попробуйте изменить «Readonly = 0;».И попробуйте удалить "imex = 1".Итак, ваш код должен выглядеть примерно так:

    using (OleDbConnection connection = new 
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";Extended Properties=\"Text;HDR=" + header + ";Readonly=0;Extended Properties=Excel 8.0;\""))
{
    using (OleDbCommand command = new OleDbCommand(sql, connection))
        {
            using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                {
                    dataTable = new DataTable();
                    adapter.Fill(dataTable);
                 }
         }
}
...