Variables SQL non paramétriques avec MySql Connector / Net et Dapper?

dapper parameters sql

Question

Le code ci-dessous génère l'erreur suivante:

Le paramètre '@ID' doit être défini.

Est-ce que je fais quelque chose de mal ou n'est-il pas possible d'utiliser des variables dans la requête SQL avec MySQL qui ne sont pas des paramètres de Dapper?

Dans cet exemple, @Slug est un paramètre Dapper, mais pas @ID. J'utilise MySQL donc je n'ai pas besoin de DEFINE @ID - il est défini lors de la première utilisation.

var sql = @"SELECT @ID := id, slug, Title, Text FROM posts WHERE slug = @Slug;  SELECT * FROM comments where postid = @ID;";
using (var connection = GetOpenConnection())
{
    var posts = connection.QueryMultiple(sql, new { Slug = slug })
        .Map<Post, Comment, int>
        (
        Post => Post.ID,
        Comment => Comment.ID,
        (post, comments) => { post.Comments = comments; }
        );
    return posts.FirstOrDefault();
}

Réponse acceptée

Il s'avère que "MySql Connector / Net" génère l'erreur.

Pour utiliser des variables SQL non paramétriques avec MySql Connector / Net, vous devez ajouter l'option suivante à votre chaîne de connexion:

  • "Autoriser les variables utilisateur = True"

Voir: http://blog.tjitjing.com/index.php/2009/05/mysqldatamysqlclientmysqlexception-parameter-id-must-be-defined.html


Réponse d'expert

Je ne pense pas que ce soit un problème épineux; dapper prend juste le SQL que vous proposez, et ajoute tous les membres de l'objet "args" qu'il voit évidemment dans le SQL.

La manière d'enquêter sur ceci est d'essayer d'exécuter directement avec DbCommand directement - je suppose que cela échouera identique. Il y aura des astuces SQL pour que cela fonctionne, mais c'est entre vous et MySQL. Tout ce que fait Dapper est:

  • créer une commande avec votre sql
  • définir un paramètre appelé "Slug" et définir la valeur
  • invoquer le SQL et analyser les résultats

il ne touche pas "ID", et il est correct qu'il ne le fasse pas.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi