2009-12-12 3 views
1

Quel est le problème ici? Voici comment j'ai trouvé sur des exemples de Subsonic 2 CodingHorror et ne fonctionne pas :(Subsonic 2.x MySQL CodingHorror

new CodingHorror().Execute("SELECT * FROM product WHERE IdProduct = @IdProduct", 1); 

L'erreur que je reçois est « paramètre « @IdProduct » doit être défini »

Je m en utilisant 2.x Subsonic et MySQL!

+0

Hmmm - lemme lancer un test avec MySQL et voir ce qui se passe ... –

Répondre

1

Essayez d'utiliser ? au lieu de @Product.

new CodingHorror().Execute("SELECT * FROM product WHERE IdProduct = ?", 1); 

MySQL utilise un différent (vs. Syntaxe SQL Server) pour faire référence aux paramètres, et puisque vous utilisez une CodingHorror (aka SQL directe redirigée vers la DB sans SubSonic entre), vous devrez probablement utiliser la syntaxe du paramètre natif du SGBDR, dans ce cas MySQL.

Jetez un coup d'œil à this blog post pour un exemple plus approfondi de la syntaxe des différences entre SQL Server et MySQL. Notez que je suppose que SubSonic ne fait rien de sournois (par exemple, analyser les chaînes SQL pour les noms de paramètres et les remplacer selon les règles spécifiques à DB) - Je suppose que SubSonic passe simplement la chaîne SQL comme c'est à la DB.

+0

Salut, Merci beaucoup pour votre aide! C'était un bon coup, mais malheureusement ce n'est pas la solution parce que Subsonic faufile la chaîne SQL et avec la syntaxe MySQL Paramètre Subsonic ne reconnaît aucun paramètre. SubSonic.SqlQueryException: le nombre de paramètres ne correspond pas aux valeurs entrées - cela pourrait être notre faute avec notre analyseur; veuillez vérifier la liste pour vous assurer que le compte est correct, et si c'est le cas, ajoutez un peu d'espace autour des paramètres de la liste. –

+0

Hmm. L'analyseur est-il assez intelligent pour savoir que "- @foo" est un commentaire? Sinon, ce serait un moyen facile de tromper l'analyseur. –

Questions connexes