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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top