Передать имя таблицы в качестве параметра 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;
}
}