可以小巧的取代表名吗?

Bra*_*non 1 c# dapper

我原本以为dapper-dot-net可以在这样的查询中替换表名:

connection.Query("SELECT * FROM @Table WHERE [Id] = @Id", new {Table = tb, Id = id});
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不会取代表名.这是预期的限制吗?

Mar*_*ell 5

除了"in"(dapper提供一些voodoo)之外,dapper是一个直接的ADO.NET工具 - 它不会改变查询.所以真正的问题是:你能在SQL中参数化表名吗?在每一个我所知道的数据库:不,你不能 - 这样是无效的.Dapper并不试图解决这个问题.

也许考虑string.Format,记住:

  • 白名单列出合法的表名以防止SQL注入
  • 使用[square brackets]表名周围的完整符号来允许全部可能的名称