调试存储过程:Visual Studio与SQL Server Management Studio

在数据库开发过程中,经常需要调试存储过程以确保其正确性。本文将介绍如何在Visual Studio和SQL Server Management Studio (SSMS)中进行存储过程的调试。

存储过程是数据库中封装的一组SQL语句,它们可以被应用程序或报告调用。当存储过程返回意外的结果或产生错误时,定位问题的原因可能会非常耗时,尤其是当存储过程的逻辑非常复杂时。在一些遗留系统中,数据库驱动的业务逻辑可能嵌入在存储过程中。在这种情况下,能够反向工程大型存储过程,从底层理解它们的行为和机制是非常有用的。

创建数据库架构

为了演示调试存储过程的过程,将使用一个包含要调试的存储过程的示例数据库

数据库中的表关系如下:

  • 一个用户可以属于多个组。
  • 一个组可以有多个用户。
  • 一个组可以有多个权限。
  • 一个权限可以与多个组关联。

简而言之,用户和组之间存在多对多的关系,这里使用一个名为UserGroup的链接表来实现。同样,GroupPermission表用于建立组和权限表之间的多对多关系。

使用Visual Studio调试存储过程

为了调试存储过程,将使用一个测试项目来演示涉及的步骤。

WinForms项目在VS2013中运行,尽管它也应该可以在一些早期版本中运行。它从UI中接受开始日期和结束日期。

一旦点击“调试存储过程”按钮,点击事件中的代码将调用spGetActiveUserListByDateCreated,并使用EF6 Code First方法传递两个日期参数。

private void btTestDebug_Click(object sender, EventArgs e) { using (var context = new UsersContext()) { var startDate = new SqlParameter("@DateCreatedStart", dtStartDate.Text); var endDate = new SqlParameter("@DateCreatedEnd", dtEndDate.Text); var result = context.Database .SqlQuery<GridResult>( "spGetActiveUserListByDateCreated @DateCreatedStart, @DateCreatedEnd", startDate, endDate) .ToList(); dgResults.DataSource = result; dgResults.Update(); } }

POCO类、DbContext和DataLayer类库项目中的映射代码是使用EF Power Tools自动生成的。

注意,存储过程也可以使用您熟悉的任何其他数据访问方法调用,例如使用EF Designer、Enterprise Library或直接使用ADO.NET。因此,上面的代码片段只是一个示例,将用于调用存储过程以调用调试器。

提供的日期范围内的用户列表将返回。结果随后应用于DataGridView控件,如下所示。

为了调试spGetActiveUserListByDateCreated,因为它生成这个结果集,需要将以下内容应用于Visual Studio中的解决方案。

  1. 使用SQL Server对象资源管理器(VS2010中的服务器资源管理器)连接到SQL Server。
  2. 双击存储过程spGetActiveUserListByDateCreated以在编辑器窗口中打开。
  3. 按F9在声明语句后设置断点。
  4. 通过右键单击服务器并选择以下选项,在SQL Server对象资源管理器中启用应用程序调试。
  5. 在项目属性窗口中启用SQL Server调试。

现在构建并运行应用程序。

执行将在存储过程中的断点处暂停。

在这个断点上,可以使用与调试C#或VB.NET代码相同的方式逐步执行T-SQL,即使用调试工具栏或调试快捷键。

使用SQL Server Management Studio (SSMS)调试存储过程

在新查询窗口中粘贴以下T-SQL:

use Users declare @startdate datetime = '2014.01.01' declare @enddate datetime = convert(varchar(20), getdate(), 102) exec spGetActiveUserListByDateCreated @DateCreatedStart = @startdate, @DateCreatedEnd = @enddate

这将传递@startdate和@enddate到spGetActiveUserListByDateCreated,并返回在提供的日期范围内的活跃用户列表。上面的代码片段是调用测试过程并在SSMS中调用调试器的示例。

可以通过遵循以下简单步骤在SSMS中调试spGetActiveUserListByDateCreated:

  1. 按F9设置断点。
  2. 点击工具栏上的调试按钮。
  3. 按F10键跳过到exec命令,直到它被黄色突出显示。
  4. 按F11键进入spGetActiveUserListByDateCreated。
  5. 按F10或工具栏按钮跳过到While循环。
  6. 按F10键进入While循环。

一旦到达proc的末尾,并且执行了最后一个Select子句,控制权将传递回调用窗口,结果将返回,如下所示。

要点

  • 应用程序调试选项出现在VS2010的服务器资源管理器中。在VS2012和VS2013中,它出现在SQL Server对象资源管理器中。
  • 在SSMS或Visual Studio中调试存储过程时,无法查看临时表的内容。
  • 无法对视图进行调试。

通过使用示例项目和数据库,本文演示了如何配置Visual Studio和SSMS以允许调试存储过程。在Visual Studio中进行调试非常方便,因为可以看到从代码传递的确切参数值,并确定这些值是否符合预期。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485