2013-03-20 6 views
7

Ich verwende eine OleDbConnection, OldDbCommand und OleDbReader gegen eine Access-Datenbank.Was verursacht meine OLEDbException, IErrorInfo.GetDescription fehlgeschlagen mit E_FAIL (0x80004005)

Ich habe eine benannte Abfrage in der Datenbank, die ich aus dem Code aufrufen.

Die Abfrage funktioniert ordnungsgemäß, wenn sie vom Zugriff ausgeführt wird.

Mehrere Ressourcen weisen darauf hin, dass der Fehler durch die Verwendung von reservierten Wörtern in der Abfrage und deren Umbruch in Klammern verursacht werden kann. Ich verwende keine reservierten Wörter und habe trotzdem alle Spaltennamen in Klammern eingeschlossen, um dies auszuschließen.

zu bestimmen versuchen, wo das Problem ist, habe ich die Abfrage zu einem einfachen

SELECT id FROM table1 WHERE id = 5 

vereinfacht, die die Ole-Verbindung keine Ausnahme werfen.

Wenn ich den nächsten Teil der Abfrage vorstellen:

SELECT table1.id FROM table1 INNER JOIN storedQuery ON table1.id = storedQuery.id WHERE table1.id = 5" 

dann bekomme ich die Ausnahme.

Die Ausnahme Details sind wie folgt:

  • Message: IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
  • ErrorCode: -2147467259
  • NativeError: -533136361
  • SQLState: 3000

Antwort

9

ich anscheinend falsch war, als ich sagte, die Abfrage keine reservierten Wörter enthielt.

Die Abfrage, die ich verwendete, wählte aus einer anderen Abfrage in der Access-Datenbank aus. Diese andere Abfrage hatte ein reserviertes Schlüsselwort, das das Problem verursacht hat.

BTW:

The Access database engine runs in different modes, depending on whether it is called from Access, data access objects, the Microsoft OLE Provider for the Access database engine, or the Microsoft Access ODBC driver. It can be run in either ANSI mode or non-ANSI (traditional) mode.

Because using these two modes results in two slightly different sets of reserved words, a query that uses a reserved word might work in one mode and fail in another mode

Access 2007 reserved words and symbols

Keith

+0

Out von Neugier, was war das reservierte Schlüsselwort in der Abfrage, die fehlgeschlagen ist? – DaveInCaz

+1

Vor zu vielen Jahren, um sich daran zu erinnern .. Der wichtige Teil für mich war herauszufinden, dass es verschiedene Reservewörter gibt, je nachdem, wie Sie die gespeicherten Abfragen aufrufen –

2

Eine weitere mögliche Ursache für diese Ausnahme ist, wenn die Datei Sie versucht/Lese zu laden gibt es nicht.

Ich habe es nützlich gefunden, eine "File.Exists" vor dem Öffnen der Datei durchzuführen, nur um sicherzustellen, dass mein Code diese spezielle Ursache der "IErrorInfo.GetDescription mit E_FAIL" Ausnahmebedingung richtig erkennt.

4

..and have wrapped all column names in brackets anyway to rule it out.

Nicht nur Spaltennamen, die durch eckige Klammern Tabellennamen sollten auch beispielsweise umgeben sein sollte, ersetzen Sie die unterhalb der Linie

SELECT id FROM table1 WHERE id = 5 

Mit der unterhalb der Linie

SELECT [id] FROM [table1] WHERE [id] = 5 
Verwandte Themen