Passer le nom de la table en tant que paramètre à Dapper

dapper

Question

Est-il possible de passer le nom de la table en tant que paramètre à une commande Dapper Query? Je ne cherche pas une fonction définie par une table SQL ou une variable de table SQL. Je veux définir le nom de la table dans C # et le transmettre à Dapper. Voici mon code, qui, une fois exécuté, renvoie une erreur de Must declare the table variable "@TableName"

var foo = conn.Query("SELECT * FROM @TableName WHERE Id = @Id", new { TableName = "MyTable", Id = 123 });

Réponse acceptée

SQL ne prend pas en charge les noms de table paramétrés, et dapper est un gestionnaire très fin par rapport à SQL - donc: non.

Vous pouvez cependant utiliser string.format:

string sql = string.Format("... from [{0}] ...", table name);

Notez que même avec [/], cela présente un risque d’injection SQL inhérent.


Réponse populaire

Pour les scripts internes génériques, nous utilisons le TableNameMapper pour générer le SQL:

public async Task<bool> DeleteAsync(int id)
{
    string tableName = Dapper.Contrib.Extensions.SqlMapperExtensions.TableNameMapper(typeof(T));
    using (var conn = new SqlConnection(ConnectionString))
    {
        int affectedRows = await conn.ExecuteAsync($"delete from {tableName} where id=@id", new { id });
        return affectedRows > 0;
    }
}



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