【问题标题】:How can I step into a SQL Server stored proc from my C# code?如何从我的 C# 代码进入 SQL Server 存储过程?
【发布时间】:2011-06-11 19:05:09
【问题描述】:

我正在调试一些使用 Ado.net 在 SQL Server 中调用存储过程 (TSQL) 的 C# 代码。如何进入存储过程?

(我想我已经看过微软员工的演示,但想不起让它工作所需的 101 个“魔法”设置。)

【问题讨论】:

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


    【解决方案1】:

    我会以 Davide 的回答和 Ian 的评论为基础,因为这正是我所经历的过程。

    假设:答案基于VS2008 & VS2010

    要在调试 .NET 应用程序时单步执行 SQL Server 上的 T-SQL 存储过程,您需要执行以下操作:

    1. 按照 MS 支持说明“How to debug stored procedures in Visual Studio .NET(选项 2)

      • 确保您已在项目属性中启用 SQL Server 调试(链接说明中的第 4 步)。
      • 确保您在存储过程中设置了一个断点(步骤 6-7)
    2. 在调用存储过程的数据连接上启用允许 SQL/CLR 调试

      • (如果没有这第二步,您将得到“当前不会命中断点。此时无法绑定 SQL 断点。包含断点的对象未加载。” 由 Ian 报告)
      • 服务器资源管理器 > 数据连接
      • 右键单击您在代码中使用的连接
      • 在菜单中勾选允许 SQL/CLR 调试选项

    从 cmets 添加:(这似乎是让它工作的关键)

    它也适用于以编程方式创建的连接。您只需使用当您右键单击服务器实例时显示的完全相同的连接字符串,单击“属性”并向下滚动到“连接字符串”(德语为 Verbindungszeichenfolge)。 p>

    【讨论】:

    • @Ian 恐怕您必须使用服务器资源管理器中列出的连接。相关文档和 VS 本身都没有表明可以对以编程方式创建的连接执行此操作。因此,至少出于调试/测试目的,您需要一个列出的连接。
    • 我认为“服务器资源管理器中列出的连接”是这种方式,它只适用于某些人,但其他人永远无法让它工作。
    • @Ian 你可能是对的。我想知道这是有意识的设计决定还是疏忽……
    • 注意:在 VS 2013 中,“如何在 Visual Studio .NET(选项 2)中调试存储过程”链接的第 4 步是:在树的 Web 部分下。单击 Web 并向下滚动到 Debuggers 部分,您将在那里看到 SQL Server。
    • @IanRingrose 它也适用于以编程方式创建的连接。您只需使用与右键单击服务器实例时显示的完全相同的连接字符串,单击“属性”并向下滚动到“连接字符串”(德语中的 Verbindungszeichenfolge)。请注意,显然,您可以在该字符串的末尾添加一个初始目录。
    【解决方案2】:

    对于那些正在使用 VS 2012 并且对为什么无法从服务器资源管理器窗口启用 SQL/CLR 调试感到困惑的人,您实际上需要通过“SQL Server 对象资源管理器”窗口进行连接。

    在该窗口中建立连接后,Allow SQL/CLR DebuggingApplication Debugging 设置将出现在服务器的右键单击上下文菜单中。这可能也适用于 2013 年,但我无法确认。

    【讨论】:

    • 我在 VS 2013 的 SQL Server Object Explorer 中找到了这些设置,但仍然收到断点当前不会被命中的消息。
    • 谢谢!这解决了我在 VS 2015 中的问题。
    【解决方案3】:

    在项目属性中启用 SQL Server 调试。

    【讨论】:

    • 对不起,我已经绑定了这个,Visual Studio 只是跳过对 ExecuteReader() 的调用,而不是进入存储的过程
    • 我认为您需要调试权限才能调试存储过程,SQL Server 是否在您的本地计算机上运行?
    • @J.W 如果从服务器资源管理器中选择了一个存储过程,我可以进入它。
    【解决方案4】:

    在解决方案资源管理器中,右键单击项目(不是解决方案)并打开属性页。单击树中的配置属性,然后单击以选中调试页面上的 SQL Server 调试复选框以启用存储过程调试。

    参考:http://support.microsoft.com/kb/316549

    【讨论】:

    • 当我在存储过程中设置断点时,我得到“断点当前不会被命中。此时无法绑定 SQL 断点。包含断点的对象未加载。”跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2017-04-01
    相关资源
    最近更新 更多