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.
Hmmm - lemme lancer un test avec MySQL et voir ce qui se passe ... –