Почему один запрос ADO.NET Excel работает, а другой нет?

Я работаю над рабочим процессом SharePoint, и на первом этапе мне нужно открыть книгу Excel и прочитать две вещи: ряд категорий (из диапазона, названного, достаточно удобно CategoryIndex) и индекса категории (в названном диапазоне Categories). CategoryIndexпредставляет собой список из примерно 100 ячеек и string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + temporaryFileName + ";" + "Extended Properties="Excel 12.0 Xml;HDR=YES""; OleDbConnection connection = new OleDbConnection(connectionString); connection.Open(); OleDbCommand categoryIndexCommand = new OleDbCommand(); categoryIndexCommand.Connection = connection; categoryIndexCommand.CommandText = "Select * From CategoryIndex"; OleDbDataReader indexReader = categoryIndexCommand.ExecuteReader(); if (!indexReader.Read()) throw new Exception("No category selected."); object indexValue = indexReader[0]; int categoryIndex; if (!int.TryParse(indexValue.ToString(), out categoryIndex)) throw new Exception("Invalid category manager selected"); OleDbCommand selectCommand = new OleDbCommand(); selectCommand.Connection = connection; selectCommand.CommandText = "SELECT * FROM Categories"; OleDbDataReader reader = selectCommand.ExecuteReader(); if (!reader.HasRows || categoryIndex >= reader.RecordsAffected) throw new Exception("Invalid category/category manager selected."); connection.Close(); представляет собой одну ячейку.

Я использую ADO.NET для запроса рабочей книги

HasRows

Не судите сам код слишком жестко; это было через много. Во всяком случае, первая команда никогда не выполняется правильно. Это не исключение. Он просто возвращает пустой набор данных. ( trueесть Read()и falseвозвращается Categories, но там нет данных). Вторая команда работает отлично. Это именованные диапазоны.

Однако они населены по-разному. Есть вызов веб-службы, который заполняется Categories. Эти значения отображаются в раскрывающемся списке. Выбранный индекс включается CategoryIndex. После нескольких часов ударов по голове я решил написать пару строк кода, чтобы значение раскрывающегося списка переходило в другую ячейку, затем я копирую значение, используя пару строк C # CategoryIndex, чтобы данные были установлены одинаково. Оказалось, что это тоже тупик.

Я что-то упускаю? Почему один запрос работает отлично, а другой не может вернуть какие-либо данные?

excel,ado.net,ado,

4

Ответов: 1


2 принят

Я нашел проблему. Excel, по-видимому, не смог разобрать значение в ячейке, так что он ничего не возвращал. Мне нужно было настроить строку подключения следующим образом:

string connectionString =
    "Provider=Microsoft.ACE.OLEDB.12.0;" +
    "Data Source=" + temporaryFileName + ";" +
    "Extended Properties="Excel 12.0 Xml;HDR=NO;IMEX=1"";

Было бы полезно, если бы оно породило исключение или дало какие-либо указания о том, почему оно терпит неудачу, но сейчас это не так. Опция IMEX=1указывает Excel обрабатывать все значения только как строки. Я вполне способен разбирать свои собственные целые числа, спасибо, очень, Excel, поэтому мне не нужна была его помощь.

excel, ado.net, ado,
Похожие вопросы
Яндекс.Метрика