Передать имя таблицы в качестве параметра Dapper

можно ли пройти в имя таблицы в качестве параметра команды запроса Dapper? Я не ищу определенную функцию таблицы SQL или переменную таблицы SQL. Я хочу определить имя таблицы в C# и передать его щеголем. Вот мой код, который при выполнении возвращает ошибку Must declare the table variable "@TableName"

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

2 ответов


SQL не поддерживает параметризованные имена таблиц, а dapper - очень тонкая оболочка над SQL-so: no.

однако вы можете использовать string.формат:

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

обратите внимание, что даже с [/] это имеет неотъемлемый риск SQL-инъекции.


для внутренних универсальных скриптов мы используем TableNameMapper для построения 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;
    }
}