Предельный размер файла Excel ODBC? - PullRequest
0 голосов
/ 01 декабря 2018

Мы создаем приложение, которое принимает файлы Excel, созданные на стороннем тестирующем устройстве.Я считаю, что пользователь может указать csv, xls или xlsx на этих устройствах при экспорте данных.Однако у нас есть данные, которые уже могут быть xls.

В настоящее время мы используем для этого ExcelDataReader.Это работает, но я хотел посмотреть, будет ли соединение ODBC быстрее.Учитывая объем данных, с которыми мы работаем, любое преимущество в производительности было бы неплохо.Я представляю, что небо ограничивает размер файла.Я знаю, что у нас уже есть хотя бы один файл размером 1 ГБ + xls.

У меня установлен распространяемый механизм базы данных доступа 64-битной версии 2016, который, как мне кажется, дает мне правильный драйвер odbc (Microsoft Excel Driver (* .xls, *.xlsx, * .xlsm, * .xlsb) версия 16.00.4513.1000).

Я использую следующий код:

    var connectionString = $"Driver={{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}};DBQ={filename}";
    using (var conn = new OdbcConnection(connectionString))
    {
        conn.Open();

        var schema = conn.GetSchema(OdbcMetaDataCollectionNames.Tables);

        var sheetNames = schema.Rows.Cast<DataRow>()
            .Select(p => p["TABLE_NAME"].ToString())
            .ToList();

        sheetNames.ForEach(Console.WriteLine);
    }

Я получаю следующую ошибку при попытке открыть OdbcConnection:

Необработанное исключение: System.Data.Odbc.OdbcException: ОШИБКА [HY000] [Microsoft] [Драйвер ODBC Excel] Общая ошибка Невозможно открыть ключ реестра Временный (энергозависимый) Ace DSN для процесса 0x211c Поток 0x3c6c DBC 0xc00d9298
Excel '.ОШИБКА [IM006] [Microsoft] [Диспетчер драйверов ODBC] Ошибка драйвера SQLSetConnectAttr драйвера ОШИБКА [HY000] [Microsoft] [Драйвер ODBC Excel] Общая ошибка Невозможно открыть ключ реестра Временный (энергозависимый) DSN Ace для процесса 0x211c Поток 0x3c6c DBC 0xc00d9298
Excel.ОШИБКА [HY000] [Microsoft] [ODBC Excel Driver] Не удается открыть базу данных «(неизвестно)».Это может быть не база данных, которую распознает ваше приложение, или файл может быть поврежден.ОШИБКА [HY000] [Microsoft] [ODBC Excel Driver] Общая ошибка Невозможно открыть ключ реестра Временный (энергозависимый) Ace DSN для процесса 0x211c Поток 0x3c6c DBC 0xc00d9298
Excel '.ОШИБКА [HY000] [Microsoft] [ODBC Excel Driver] Общая ошибка Невозможно открыть ключ реестра Временный (энергозависимый) Ace DSN для процесса 0x211c Поток 0x3c6c DBC 0xc00d9298
Excel '.ОШИБКА [HY000] [Microsoft] [ODBC Excel Driver] Не удается открыть базу данных «(неизвестно)».Это может быть не база данных, которую распознает ваше приложение, или файл может быть поврежден.

Я нашел несколько предложений, таких как: «Общая ошибка Невозможно открыть реестрkey Temporary (volatile)… »из Access ODBC , но, похоже, ничто не соответствует моей проблеме.

Я начал с электронной таблицы, состоящей из 11 листов и размером около 440 МБ.Похоже, что это большая часть таблицы, поэтому я подумал, что это может быть связано с ограничениями на размер файла, количество листов, количество строк или некоторые неверные данные в таблице.

Я начал удалять листы.В конце концов я дошел до того, что файл имел только первые 5 листов, а затем мое ODBC-соединение начало работать.

В этот момент размер файла уменьшился до 200 МБ.Затем я подумал, что, возможно, что-то не так / испортилось с шестым листом.Итак, я добавил его обратно и удалил первый лист.И это нормально обрабатывается, так что с данными на шестом листе нет ничего плохого.

Тогда я подумал, что это должно быть либо ограничением числа строк, либо ограничением размера файла.Кажется, что большинство / все рабочие листы имеют 65532 строки и 60 столбцов.Итак, я взял пример с 6 листами (который занимал около 240 МБ и не работал) и удалил 46 столбцов (дополнительные данные, которые важны, но вторичны требованиям).Это снизило его до 84 МБ, и соединение ODBC было успешным.Это наводит меня на мысль, что это не связано с количеством листов или количеством строк, а с размером файла.

Итак, я думаю, проще говоря, существует ли известный предел размера файла при подключении ODBC к файлу XLS?Похоже, что может быть где-то между 200 МБ и 240 МБ.Я нашел много данных об ограничениях в электронных таблицах для различных версий программного обеспечения Mirosoft, но ничего, что указывало бы на ограничение ODBC.

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