【问题标题】:Getting actual SQL Query from paramaterized query in C# .NET debugger从 C# .NET 调试器中的参数化查询获取实际 SQL 查询
【发布时间】:2021-06-24 18:53:19
【问题描述】:

我正在尝试获取查询,以便可以对其进行操作并直接在 SQL Server 中运行它。这是一个参数化查询,就像我在 VS 2017 中的 .NET 4+ 调试器中一样:

SELECT DISTINCT name, 
CASE WHEN title = @searchTitle OR fullname = @searchFullName THEN 1 
ELSE ...
AS sorting
ORDER BY sorting ASC;

忽略任何语法问题,因为查询是一个示例并且运行良好。我也正确设置了参数,请注意,有大量实际参数,所以我无法复制和粘贴。查询是这样执行的:

                return this.dataProvider.ExecuteMyLikeQueryTerms(
                     dr =>
                     {
                         var dt = new DataTable();
                         dt.Load(dr);

                         return dt;
                     },
                query,
                parameters,
                connection);

我怎样才能得到执行的 SQL 并添加了所有参数,以便我可以在调试器中看到它并将其粘贴到 SQL Server 中?我有一个非常大的查询,正在尝试追踪它。

【问题讨论】:

  • 参数没有添加到中,如文本替换 - 参数化查询“按原样”发送到 SQL Server 引擎,连同参数列表和它们的值....否则它将再次受到 SQL 注入攻击的广泛开放(这正是您首先要通过使用参数来避免的)
  • 如前所述,参数值绑定到编译树中的参数。但是您可以使用 SQL Profiler(RPC:Completed 事件)查看文本 表示

标签: c# sql-server sql-server-2012 .net-4.5 visual-studio-debugging


【解决方案1】:

您已经发送了确切的查询,其中包括参数(不是参数值)。最接近这里的方法是伪造一些局部变量:

declare @searchTitle nvarchar(max) = N'whatever';
-- etc

在您的查询之前(这是 MiniProfiler 所做的,以便可以复制/粘贴可运行的查询)

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多