是否可以将表名作为参数传递给Dapper Query命令?我不是在寻找SQL表定义的函数或SQL表变量.我想在C#中定义表名并将其传递给Dapper.这是我的代码,执行时返回错误Must declare the table variable "@TableName"
var foo = conn.Query("SELECT * FROM @TableName WHERE Id = @Id", new { TableName = "MyTable", Id = 123 });
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 20
SQL不支持参数化表名,而dapper是一个非常非常薄的SQL包装器 - 所以:不.
但是,您可以使用string.format:
string sql = string.Format("... from [{0}] ...", table name);
Run Code Online (Sandbox Code Playgroud)
请注意,即使使用[/],这也存在固有的SQL注入风险.
您可以先检查表是否存在,以防止 Sql 注入:
string tableNameExistsCheck = "SELECT count(1) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @tableName";
if (c.QuerySingle<int>(tableNameExistsCheck, new { tableName }) == 1)
{
string sql = string.Format("... from [{0}] ...", tableName);
var result = c.Query(sql);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3549 次 |
| 最近记录: |