Parameters 执行查询时获取输出数据

Parameters 执行查询时获取输出数据,parameters,output,dapper,Parameters,Output,Dapper,我有在sqlserver中执行查询的代码,在错误异常中使用dapper访问我希望使用指定参数执行查询: StringBuilder sql = new StringBuilder(); sql.AppendLine(" SELECT " + campoChave + " AS CODIGO, "); sql.AppendLine(" " + campoSelecao + " AS DESCRICAO "); sql.AppendLine(" FROM " + tabela);

我有在sqlserver中执行查询的代码,在错误异常中使用dapper访问我希望使用指定参数执行查询:

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 });
StringBuilder sql=new StringBuilder();
AppendLine(“选择“+campoChave+”作为CODIGO,”);
sql.AppendLine(“+campoSelecao+”如所述”);
sql.AppendLine(“FROM”+tabela);
AppendLine(“其中codigosidioma=@codigosidioma”);
sql.AppendLine(“订单人”+campoSelecao);
IEnumerable entities2=conexao.Query(sql.ToString(),新的{codigo=1});
这段代码有错误,我想在用命令执行dapper之后获取查询

例如:选择teste作为codigo。。。。。其中CodA=1


@CODIGOA-->1

执行命令后的查询几乎总是。。。和你说的一模一样。Dapper不会替换参数令牌——这将是一个SQL注入漏洞。即使使用监视SQL流量的工具(mini profiler、SQL server profiler等):显示的命令也将包括参数令牌,参数将单独发送

Mini profiler通过(在显示中)在命令前面加上类似于参数的
declare
语句来欺骗这一点,因此您可以在SSMS中运行它-这将为您提供如下信息:

declare@coda int=1;
选择teste作为codigo。。。。。其中codigoidioma=@codigoidioma
但请注意,即使在这里,它仍然是参数化的(ish)


具体地说,在dapper的案例中,“它将是您传入的内容”一般规则有一些例外,涉及一些特定场景,例如@foo中的
(对于
列表
for
foo
),它将生成适当的参数扩展,但是它仍然是参数化的。

执行命令后的查询几乎总是。。。和你说的一模一样。Dapper不会替换参数令牌——这将是一个SQL注入漏洞。即使使用监视SQL流量的工具(mini profiler、SQL server profiler等):显示的命令也将包括参数令牌,参数将单独发送

Mini profiler通过(在显示中)在命令前面加上类似于参数的
declare
语句来欺骗这一点,因此您可以在SSMS中运行它-这将为您提供如下信息:

declare@coda int=1;
选择teste作为codigo。。。。。其中codigoidioma=@codigoidioma
但请注意,即使在这里,它仍然是参数化的(ish)


具体地说,在dapper的案例中,“它将是您传入的内容”一般规则有一些例外,涉及一些特定场景,例如@foo
中的
(对于
列表
for
foo
),它将生成适当的参数扩展,但是它仍然会被参数化。

在上面的示例中,为了简化生成的查询,但是如果是一个插入或更新代码,在这种情况下,它将作为参数传递给一个具有所有属性的语言对象,那么我将如何获得此查询?@user3576807您使用的确切方法是什么?例如,您是否使用dapper.contrib等?在这些情况下,我要再次说“miniprofiler”()——它与dapper没有直接联系,但它是由同一个团队提供的,我们将它与dapper结合使用,用于我们自己的系统/查询监控(例如,我们在堆栈溢出的每个页面请求中使用它);但是再次强调:它只会给你参数化的表单,而不是替换了参数的表单,因为dapper在上面的例子中并没有这样做来简化生成的查询,但是,如果是一个插入或更新代码,在这种情况下,它将作为参数传递给一个具有所有属性的语言对象,那么我如何获得此查询?@user3576807您使用的确切方法是什么?例如,您是否使用dapper.contrib等?在这些情况下,我要再次说“miniprofiler”()——它与dapper没有直接联系,但它是由同一个团队提供的,我们将它与dapper结合使用,用于我们自己的系统/查询监控(例如,我们在堆栈溢出的每个页面请求中使用它);但同样:它只会给你参数化的表单,而不是替换了参数的表单,因为dapper不会这么做。注意:如果你要使用
StringBuilder
,最好全程使用它,即
sql.Append(“SELECT”).Append(campoChave).AppendLine(“AS CODIGO”),等等;不用说,您还需要非常小心,不要允许用户输入到
campoChave
campoSelecao
等中,因为这将允许SQL注入如果您想记录查询,即使它使用了简洁的扩展,也可能会有所帮助。在内部,它创建一个用于日志记录的文件。小注:如果要使用
StringBuilder
,最好在整个过程中使用它,即
sql.Append(“SELECT”).Append(campoChave).AppendLine(“AS CODIGO”),等等;不用说,您还需要非常小心,不要允许用户输入到
campoChave
campoSelecao
等中,因为这将允许SQL注入如果您想记录查询,即使它使用了简洁的扩展,也可能会有所帮助。在内部,它创建一个日志,然后用于日志记录。