Try using ?
instead of @Product
.
new CodingHorror().Execute("SELECT * FROM product WHERE IdProduct = ?", 1);
MySQL uses a different (vs. SQL Server) syntax to refer to parameters, and since you're using a CodingHorror (aka direct SQL piped to the DB without SubSonic getting in between) you will probably need to use the native parameter syntax of the RDBMS, in this case MySQL.
Take a look at this blog post for a more thorough example of the diffs in parameter syntax between SQL Server and MySQL.
Note that I'm assuming that SubSonic doesn't do anything sneaky (e.g. scan the SQL strings for parameter names and replace them according to DB-specific rules)-- I'm assuming that SubSonic simply passes the SQL string as-is over to the DB.