OleDB + Jet: Erreur de syntaxe dans l'opération d'inscription
-
04-10-2019 - |
Question
Je l'ai construit une requête complexe pour ma base de données d'accès et l'accès il fonctionne comme un charme. Mais lorsque je tente d'exécuter la même requête dans mon programme via OleDB-je obtenir l'exception « Erreur de syntaxe dans l'opération d'inscription ». Pas plus d'info.
SELECT
MainTable.Main_dbID,
D0.Kvp_Value AS ["Value"]
FROM (MainTable
INNER JOIN (
SELECT Main_dbID, Kvp_Value
FROM KVPTable
WHERE Kvp_Code IN (1, 2, 4)
) AS D0
ON D0.Main_dbID = MainTable.Main_dbID)
WHERE Main_Time <= ? AND Main_Time >= ?;
Je me suis cassé vers le bas de requête pour autant que je sentais qu'il soit encore représentatif. La raison pour laquelle j'utilise un sous-sélection au lieu d'une jointure directe est que je dois joindre à ma valeur clé de table plusieurs fois pour mettre les touches différentes dans des colonnes différentes. Je ne pouvais pas que travailler autrement.
Je travaille avec C # 2.0 et Visual Studio 2008 dans le cas qui est pertinent.
La solution
trouvé le problème. La façon dont je suis entré dans la requête a cassé ...
EDIT: Comme vous pouvez le voir, je distribuais la requête sur plusieurs lignes il est donc un peu plus facile à lire. Quand je collais dans mon code source ce qui est arrivé:
"SELECT FooField" +
"FROM BarTable;";
qui se traduit par "SELECT FooFieldFROM bartable;" - donc évidemment pas la syntaxe valide, il est douloureux. Je n'ai pas réalisé d'abord ...
Autres conseils
Il est certainement un message confus. Quel est le problème est la virgule supplémentaire:
D0.Value AS ["Value"], <-- here
J'espère que ces noms ne sont pas des noms champ réel (colonne), parce que la valeur et le temps sont des mots réservés et provoqueront des problèmes sans fin. Je suggère au moins que vous les placez entre crochets, si elles sont des noms réels.