J'utilise une OLEDBConnection, OlddbCommand et Oledbreader contre une base de données d'accès.
J'ai une requête nommée dans la base de données que j'appelle du code.
La requête fonctionne correctement lorsqu'elle est couru de l'accès.
Plusieurs ressources indiquent que l'erreur pourrait être provoquée par l'utilisation de mots réservés dans la requête et pour les envelopper avec des crochets. Je n'utilise aucun mot réservé et je saisra tous les noms de colonnes entre parenthèses de toute façon pour l'exclure.
En essayant de déterminer où est le problème, j'ai simplifié la requête à un simple
SELECT id FROM table1 WHERE id = 5
que la connexion OLE ne jette pas une exception.
Quand j'introduit la partie suivante de la requête:
SELECT table1.id FROM table1 INNER JOIN storedQuery ON table1.id = storedQuery.id WHERE table1.id = 5"
ensuite, je reçois l'exception.
Les détails d'exception sont les suivants:
- Message: ierrrorinfo.getDescription a échoué avec e_fail (0x80004005).
- ErrorCode: -2147467259
- NativeError: -533136361
- Sqlstate: 3000
Je me suis apparemment confondu quand j'ai dit que la requête ne contenait aucun mot réservé.
La requête que j'utilisais était la sélection d'une autre requête dans la base de données d'accès. Cette autre requête avait un mot clé réservé qui causait le problème.
D'AILLEURS:
Le moteur de base de données d'accès s'exécute dans différents modes, selon que cela soit appelé à partir de l'accès, des objets d'accès aux données, du fournisseur Microsoft OLE pour le moteur de base de données d'accès, ou Microsoft Access ODBC pilote. Il peut être exécuté en mode ANSI ou en mode non-ANSI (traditionnel).
Étant donné que l'utilisation de ces deux modes entraîne deux ensembles de mots réservés légèrement différents, une requête qui utilise un mot réservé peut fonctionner en un seul mode et échouer dans un autre mode.
Keith
..et avez-vous enveloppé tout colonne Noms entre parenthèses de toute façon pour l'exclure.
Non seulement les noms de colonnes qui doivent être entourés par des supports carrés Les noms de table doivent également, par exemple, remplacer la ligne ci-dessous.
SELECT id FROM table1 WHERE id = 5
Avec la ligne ci-dessous
SELECT [id] FROM [table1] WHERE [id] = 5
Une autre cause possible de cette exception est que si le fichier que vous essayez de charger/lire n'existe pas.
J'ai trouvé utile d'effectuer un "fichier.exists" avant d'essayer d'ouvrir le fichier juste pour vous assurer que mon code détecte cette cause spécifique de "iErrorinfo.getscription échec correctement avec e_fail".