2013-03-20 14 views
7

Sto utilizzando un OleDbConnection, OldDbCommand e OleDbReader su un database di Access.Qual è la causa della mia OLEDbException, IErrorInfo.GetDescription non riuscita con E_FAIL (0x80004005)

Ho una query denominata nel database che sto chiamando dal codice.

La query funziona correttamente quando viene eseguita dall'accesso.

Diverse risorse indicano che l'errore potrebbe essere causato dall'utilizzo di parole riservate nella query e da racchiudere tra parentesi quadre. Non sto usando alcuna parola riservata e ho comunque avvolto tutti i nomi delle colonne tra parentesi per escluderlo.

Cercando di determinare dove il problema è che hanno semplificato la ricerca di un semplice

SELECT id FROM table1 WHERE id = 5 

che la connessione Ole non un'eccezione.

Quando presento la parte successiva della query:

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

tanto sono l'eccezione.

dettagli L'eccezione sono i seguenti:

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

risposta

9

mi pare si sbagliava quando ho detto la query non contiene parole riservate.

La query che stavo utilizzando è stata la selezione da un'altra query nel database di Access. Quell'altra query aveva una parola chiave riservata che stava causando il problema.

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 di curiosità, qual è stata la parola chiave riservata nella query che non è riuscita? – DaveInCaz

+1

Troppi anni fa per ricordare .. La parte importante per me era scoprire che ci sono diverse parole di riserva a seconda del modo in cui stai chiamando le query memorizzate –

2

Un'altra possibile causa di questa eccezione è se il file tuo tentativo di caricare/lettura non esiste.

Ho trovato utile eseguire un "File.Exists" prima di provare ad aprire il file solo per assicurarsi che il mio codice rilevi questa causa specifica dell'eccezione "IErrorInfo.GetDescription non riuscita con E_FAIL" correttamente.

4

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

Non solo le colonne i nomi che dovrebbero essere circondati da parentesi quadre nomi delle tabelle devono pure Ad esempio, sostituire la riga sotto

SELECT id FROM table1 WHERE id = 5 

Con la linea di sotto

SELECT [id] FROM [table1] WHERE [id] = 5 
Problemi correlati