繁体   English   中英

在Dapper中执行参数化SQL查询(应用了参数)之前,该如何获取它?

[英]How to get the parametrized SQL query (with parameters applyed) before execute it in Dapper?

我需要将参数应用于日志目的的sql查询。

private dynamic GetInfo(int cdEmpresa)
{
    dynamic info = new ExpandoObject();

    StringBuilder sql = new StringBuilder();
    sql.AppendLine(" SELECT * from FROM EMPRESA E");
    sql.AppendLine(" WHERE cdEmpresa = @cdEmpresa ");

    using (IDbConnection cn = GetConnection(cdEmpresa).Connection)
    {
        Logger.Debug("SQL: " + sql.ToString()); // Does not apply the parameters, obviously

        cn.Open();
        info = cn.Query<dynamic>(sql.ToString(), new
        {
            cdEmpresa = cdEmpresa // i need to execute te sql to parametrize it, is there a way to parametrize it first its execution?
        }).ToList();

    }
    return infoCadastro;
}

在处理查询时,您要查询的内容不存在

即使执行查询,参数值也不会直接替换为SQL命令。 参数化查询的重点在于,代码就是代码,数据就是数据,两者永不交叉。 这消除了注入攻击的任何可能性,无论您需要处理什么新的语言功能,自定义转义字符或unicode怪异。

在服务器端,代替此:

SELECT * FROM [table] WHERE ID=1234;

更像是运行以下代码:

DECLARE @ID int;
SET @ID = LoadParameterValueFromClientQueryObject("ID");
SELECT * FROM [table] WHERE ID= @ID;

总是要处理一个变量,该变量的值要与sql语言编译器/优化器保持距离,直到将命令编译成执行计划之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM