我有在错误异常中使用dapper访问的sqlserver中执行查询的代码,我想使用指定参数执行查询:
StringBuilder sql = new StringBuilder();
sql.AppendLine(" SELECT " + campoChave + " AS CODIGO, ");
sql.AppendLine(" " + campoSelecao + " AS DESCRICAO ");
sql.AppendLine(" FROM " + tabela);
sql.AppendLine(" where codigoidioma = @codigoIdioma");
sql.AppendLine(" ORDER BY " + campoSelecao);
IEnumerable entities2 = conexao.Query<ComboBoxGenerico>(sql.ToString(), new { codigoIdioma = 1 });
此代码有错误,我想在使用命令执行dapper之后获取查询
例如:选择睾丸作为codigo .....,其中codigoidioma = 1
@codigoIdioma ---> 1
答案 0 :(得分:0)
执行命令后的查询几乎总是...完全是您传入的内容。Dapper不会 replace 参数标记-这将是一个SQL注入孔。即使使用监视SQL流量的工具(迷你配置文件管理器,SQL Server配置文件管理器等):显示的命令也将包含参数令牌,并分别发送参数。
Mini-profiler 通过在显示之前在命令前添加看起来像参数的declare
语句来欺骗,因此您可以在SSMS中运行它-这将为您提供像这样:
declare @codigoidioma int = 1;
select teste as codigo ..... where codigoidioma = @codigoidioma
但是请注意,即使在这里,它仍然保持参数化(ish)。
对于精巧的 ,“ em它将成为您传入的内容”一般规则有一些 例外,涉及某些特定情况,例如{ {1}}(用于in @foo
的{{1}}之类的地方),它将在其中生成适当的参数扩展,但仍将对其进行参数化。