Requête SQL générique paramétrée avec dapper

c# dapper

Question

J'utilise cette méthode générique:

protected IEnumerable<T> ExecuteSprocQuery<T>(string sproc, object objectParams)
{
    using (var conn = OpenConnection())
    {
    var list = conn.Query<T>(sproc, null, commandType: CommandType.StoredProcedure);
    return list;
    }
}

pour appeler des procédures stockées comme ceci:

ExecuteSprocQuery<SomePoco>("SomeSproc", new { P1 = p1, P2 = p2 }).ToList().FirstOrDefault();

J'essaie d'implémenter quelque chose de similaire pour les requêtes SQL paramétrées:

protected IEnumerable<T> ExecuteQuery<T>(string sqlString, object objectParams)
{
    using (var conn = OpenConnection())
    {
    var list = conn.Query<T>(sqlString, null, commandType: CommandType.Text);
    return list;
    }
}

mais quelque chose comme ça jette une erreur:

ExecuteQuery<int?>("Select id from [dbo].[TableName] where [X] = @x ", new { @x  = 1}).FirstOrDefault();

Des idées?

PS:

L'erreur est:

Additional information: Must declare the scalar variable "@x".

Réponse acceptée

Il semble que vous ne transmettiez jamais l'objet params à Query () dans vos méthodes. Sans le code de votre SP, il est difficile de le savoir, mais il peut accepter des valeurs NULL comme paramètres et donc ne pas échouer, alors que le SQL brut ne fera probablement que planter.

var list = conn.Query<T>(sproc, objectParams, commandType: CommandType.StoredProcedure);

var list = conn.Query<T>(sqlString, objectParams, commandType: CommandType.Text);


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