在ASP.NET 2.0中操作数据之七十二:调试存储过程

  Visual Studio有很多的调试功能.我们只需要稍稍点点鼠标,敲敲键盘就可以使用断点(breakpoints)来打断某个程序的执行,并查看其状态.除了调试代码以外,Visual Studio也支持对SQL Server里面的存储过程进行调试.就像可以在ASP.NET页面的后台代码类或Business Logic Layer class类里设置断点一样,我们也可以在存储过程里设置断点.

  本文我们将考察如何在Visual Studio的Server Explorer里进入存储过程并设置断点.当ASP.NET程序调用该存储过程时就会碰到该断点.

  注意:不幸的是只能在Visual Studio的Professional和Team Systems版本里才能对存储过程设置断点.如果你使用的是Visual Web Developer或Visual Studio的标准版,你就只能看教程是如何一步步的做的,但不能在自己的机器上实践.

SQL Server调试主题

  Microsoft SQL Server 2005集合了公共语言运行库(Common Language Runtime (CLR)),它可以被所有.NET模块使用.因此SQL Server 2005支持对数据库对象的管理.

  我们可以创建数据库对象,比如存储过程、用户定义的函数((UDFs)等,就像在一个C#类里定义的方法一样.你可以在从.NET Framework或自己定义的类里使用这些存储过程和自定义函数.当然,SQL Server 2005也支持T-SQL数据库对象.SQL Server 2005支持对T-SQL数据库对象以及管理数据库对象(managed database objects)的调试.不过只能在Visual Studio 2005专业版或Team Systems版本里才行.本文我们将考察对T-SQL数据库的调试.后面的教程我们将考察对管理数据库对象的调试.文章《Overview of T-SQL and CLR Debugging in SQL Server 2005》()归纳了在Visual Studio里调试SQL Server 2005对象的3种途径:

.直接数据库调试(DDD)—在服务器资源管理器里进入某个T-SQL数据库对象,比如存储过程或用户定义函数UDFs.我们将在第一步考察该模式.

.应用程序调试—我们可以在一个数据库对象里设置断点,然后再返回到一个ASP.NET应用程序.当执行这些数据库对象时,将遇到断点并转到调试器.注意,在应用程序调试模式,我们不能在应用程序代码里打入一个数据库对象,所以我们必须直接在这些存储过程或用户义函数里设置断点.我们将在第二步考察该模式.

.通过一个SQL Server Project来调试

  Visual Studio专业版及Team Systems版包含一个SQL Server Project类型,它通常用来创建管理数据库对象(managed database objects),我们将在后面的教程考察SQL Server Projects及如何调试其内容.Visual Studio可以对本地或外部SQL Server实例进行调试。如果你使用的SQL Server数据库不在本地,那么自然,它就是一个外部实例.本文我们将使用本地SQL Server实例,调试外部SQL Server实例的存储过程要比调试本地的多出一些步骤.

  如果你使用的是一个本地SQL Server实例,那么你可以从第一步看到结尾.如果你使用的是外部SQL Server实例,那么你首先要确保是以Windows user帐户登录电脑,且包含一个连接到外部SQL Server实例的登录界面.此外,应全部以系统管理员角色登录.你可以参阅本文结尾的“Debugging T-SQL Database Objects on Remote Instances”部分,查看如何配置Visual Studio 和 SQL Server以调试外部实例.

  最后,我们应该明白支持T-SQL数据库对象调试的特性没有支持.NET应用程序调试的特性丰富.比如,不支持断点条件过滤(breakpoint conditions and filters),只能用到寥寥几个调试窗口;你无法使用Edit 和 Continue等等。更多详情请参阅文章《Limitations on Debugger Commands and Features》((VS.80).aspx)

第一步:直接进入储存过程

  使用Visual Studio我们可以很容易地直接进入一个数据库对象。我们来看如何使用Direct Database Debugging (DDD)特性进入Northwind数据库里的Products_SelectByCategoryID存储过程.就像其名字揭示的那样,该存储过程返回特定category的产品信息。我们在第68章创建了该存储过程,在服务器资源管理器里展开Northwind数据库节点,接下来进入存储过程文件夹,在Products_SelectByCategoryID存储过程上右键单击,选“Step Into Stored Procedure”,这将打开调试器.因为该存储过程接受一个@CategoryID输入参数,我们输入1,这将返回“饮料”类产品的信息。

/uploads/allimg/200612/1H6212C4_0.png


图1:使用值为“1”的@CategoryID输入参数

  指定@CategoryID参数的值后,就可以执行存储过程了.不过调试器执行完第一条Statement后就中止了,而不会完全运行存储过程.。注意边框上的黄色箭头,它指出了Statement在存储过程的当前位置.你可以在Watch窗口查看或编辑参数值,或者改写存储过程用到的参数名称.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwywz.html