Ich arbeite an einem SharePoint-Workflow, und der erste Schritt erfordert, dass ich eine Excel-Arbeitsmappe öffne und zwei Dinge lese: eine Reihe von Kategorien (aus einem Bereich mit dem Namen Categories
) und einem Kategorieindex (in der benannten Bereich CategoryIndex
). Categories
ist eine Liste von etwa 100 Zellen, und CategoryIndex
ist eine einzelne Zelle.Warum funktioniert eine ADO.NET Excel-Abfrage und eine andere nicht?
ich ADO.NET bin mit der Arbeitsmappe zur Abfrage
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();
Sie den Code nicht beurteilen, selbst zu hart; es hat viel durchgemacht. Wie auch immer, der erste Befehl wird nie korrekt ausgeführt. Es wird keine Ausnahme ausgelöst. Es gibt nur einen leeren Datensatz zurück. (HasRows
ist true
, und Read()
gibt false
zurück, aber es gibt keine Daten dort) Der zweite Befehl funktioniert tadellos. Dies sind beide benannte Bereiche.
Sie sind jedoch unterschiedlich bevölkert. Es gibt einen Web-Service-Anruf, der Categories
füllt. Diese Werte werden in einer Dropdown-Box angezeigt. Der ausgewählte Index geht in CategoryIndex
. Nach stundenlangem Kopfschütteln habe ich beschlossen, ein paar Codezeilen zu schreiben, so dass der Wert des Drop-downs in eine andere Zelle geht. Dann kopiere ich den Wert mit ein paar Zeilen C# in CategoryIndex
, damit die Daten identisch gesetzt werden . Das stellte sich als eine Sackgasse heraus.
Fehle ich etwas? Warum funktioniert eine Abfrage einwandfrei und die andere gibt keine Daten zurück?