Я работаю над рабочим процессом SharePoint, и на первом этапе мне нужно открыть книгу Excel и прочитать две вещи: ряд категорий (из указанного диапазона, достаточно удобно, Categories
) и индекс категории (в названии диапазон CategoryIndex
). Categories
- это список из примерно 100 ячеек, а CategoryIndex
- это одна ячейка.Почему один запрос ADO.NET Excel работает, а другой нет?
Я использую ADO.NET для запроса Рабочему
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();
Не судите сам код слишком строго; это было через много. Во всяком случае, первая команда никогда не выполняется правильно. Это не исключение. Он просто возвращает пустой набор данных. (HasRows
- true
, и Read()
возвращает false
, но данных там нет) Вторая команда работает отлично. Это именованные диапазоны.
Однако они населены по-разному. Существует вызов веб-службы, который заполняет Categories
. Эти значения отображаются в раскрывающемся списке. Выбранный индекс переходит в CategoryIndex
. После нескольких часов ударов головой я решил написать пару строк кода, чтобы значение раскрывающегося списка переходило в другую ячейку, затем я копирую значение, используя пару строк C#, в CategoryIndex
, так что данные устанавливаются одинаково , Оказалось, что это тоже тупик.
Я что-то упустил? Почему один запрос работает отлично, а другой не может вернуть какие-либо данные?