Я работаю над рабочим процессом SharePoint, и на первом этапе мне нужно открыть книгу Excel и прочитать две вещи: диапазон категорий (из диапазона с именем, что достаточно удобно, Categories
) и индекс категории (в именованном диапазоне CategoryIndex
). ). Categories
— это список примерно из 100 ячеек, а CategoryIndex
— одна ячейка.
Я использую 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
, чтобы данные были установлены идентично . Это тоже оказалось тупиком.
Я что-то упускаю? Почему один запрос работает идеально, а другой не возвращает никаких данных?