[英]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.