手机版

ASP.NET 2.0中的操作数据72:调试存储过程

时间:2021-10-30 来源:互联网 编辑:宝哥软件园 浏览:

导言:

Visual Studio有很多调试功能。我们可以使用断点来中断程序的执行,并通过用小鼠标点击键盘来检查其状态。除了调试代码,Visual Studio还支持在SQL Server中调试存储过程。就像在ASP.NET页面的后台代码类或业务逻辑层类中设置断点一样,我们也可以在存储过程中设置断点。

在本文中,我们将研究如何在Visual Studio的服务器资源管理器中输入存储过程并设置断点,这将在ASP.NET程序调用存储过程时遇到。

注意:不幸的是,断点只能在Visual Studio的专业版和团队系统版的存储过程中设置。如果您使用的是标准版本的Visual Web Developer或Visual Studio,则只能看到教程是如何一步一步完成的,但不能在自己的机器上练习。

SQL Server调试主题。

Microsoft SQL Server 2005集成了公共语言运行库(CLR),所有人都可以使用。NET模块。因此,SQL Server 2005支持数据库对象的管理。

我们可以创建数据库对象,比如存储过程和用户定义函数,就像在C#类中定义的方法一样。您可以在从定义的类中使用这些存储过程和用户定义的函数。NET框架或者你自己。当然,SQL Server 2005也支持T-SQL数据库对象。SQL Server 2005支持T-SQL数据库对象和托管数据库对象。调试。但只能在Visual Studio 2005专业版或团队系统版中完成。在本文中,我们将研究T-SQL数据库的调试。在下面的教程中,我们将研究管理数据库对象的调试。第《Overview of T-SQL and CLR Debugging in SQL Server 2005》条(http://blogs . msdn.com/sqlclr/archive/2006/06/)。29/651644.aspx)总结了在Visual Studio中调试SQL Server 2005对象的三种方法:直接数据库调试(DDD)-在服务器资源管理器中输入特定的T-SQL数据库对象,如存储过程或用户定义函数UDFs。我们将在第一步检查这个模式。应用程序调试—我们可以在数据库对象中设置断点,然后返回到ASP.NET应用程序。当执行这些数据库对象时,我们会遇到断点并转到调试器。请注意,在应用程序调试模式下,我们不能在应用程序代码中输入数据库对象,因此我们必须直接在这些存储过程或用户定义函数中设置断点。我们将在第二步中研究这种模式。通过一个SQL Server项目进行调试。

Visual Studio专业版和团队系统版包含一个SQL Server项目类型,通常用于创建托管数据库对象。我们将在下面的教程中研究SQL Server项目以及如何调试其内容。Visual Studio可以调试本地或外部SQL Server实例。如果您使用的SQL Server数据库不是本地的,它自然是一个外部实例。在本文中,我们将使用本地SQL Server实例,调试外部SQL Server实例的存储过程将比调试本地实例花费更多的步骤。

如果您使用的是本地SQL Server实例,您可以从第一步看到结尾。如果使用的是外部SQL Server实例,则必须首先确保以Windows用户帐户登录到计算机,并包括连接到外部SQL Server实例的登录界面。此外,每个人都应该以系统管理员的身份登录。您可以参考本文末尾的“在远程实例上调试t-SQL数据库对象”一节,了解如何配置Visual Studio和SQL Server来调试外部实例。

最后,我们应该明白,支持调试T-SQL数据库对象的特性不如支持调试的特性丰富。NET应用程序。例如,不支持断点条件和过滤器,只能使用少数调试窗口。您不能使用“编辑”、“继续”等。见第《Limitations on Debugger Commands and Features》条(http://mdsn2.microsoft.com/en-us/library/ms165035诉80)。有关更多详细信息。

第一步:直接进入存储流程。

使用Visual Studio,我们可以轻松地直接访问数据库对象。让我们看看如何使用直接数据库调试(DDD)功能来访问罗斯文数据库中的Products_SelectByCategoryID存储过程。顾名思义,这个存储过程返回特定类别的产品信息。在第68章中,我们创建了存储过程,在服务器资源管理器中展开了Northwind数据库节点,然后进入存储过程文件夹,右键单击Products_SelectByCategoryID存储过程,选择“单步执行存储过程”,将打开调试器。因为存储过程接受@CategoryID的输入参数,所以我们输入1,它将返回“饮料”产品的信息。

//files.jb51.net/file_images/article/201605/2016051911474566.png

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

指定@CategoryID参数的值后,就可以执行存储过程了。但是,在调试器完成第一条语句的执行后,它将被中止,并且存储过程将不会完全运行。请注意边框上的黄色箭头,它指示语句在存储过程中的当前位置。您可以在“监视”窗口中查看或编辑参数值,或者重写存储过程中使用的参数名称。

//files.jb51.net/file_images/article/201605/2016051911474667.png

图2:调试器在调试完第一条语句后终止。

如果您想一次只调试一个语句,请单击工具栏上的“单步执行”按钮或按F10。由于Products_SelectByCategoryID存储过程只包含一个SELECT语句,因此按下F10将会越过该语句并完成存储过程的执行。执行后,结果将显示在输出窗口中,调速器将停止。

注意:T-SQL调试发生在语句级,但对SELECT语句无效。

第二步:为网站设置应用程序调试。

当直接在服务器资源管理器中调试存储过程时,我们需要手动设置它们,但是大多数时候我们感兴趣的是在ASP.NET应用程序中调用存储过程时调试它们。当设置了断点的存储过程被应用程序调用时,它将在执行过程中遇到此断点。我们可以查看和更改存储过程的参数值,就像我们在第一步中所做的那样。

但是,在此之前,我们需要将ASP.NET网络应用程序与SQL Server调试器连接起来。在解决方案资源管理器中,右键单击网站名称(ASPNET_Data_Tutorial_74_CS),选择“属性页”项,然后选择左侧的“开始选项”,在调试器区域选择SQL Server选择框,如图3所示:

//files.jb51.net/file_images/article/201605/2016051911474668.png

图3:在应用程序的属性页中选择SQL Server框。

此外,我们需要更新数据库连接字符串以禁用“连接池”。当数据库连接关闭时,相应的SqlConnection对象将存储在连接池中。建立数据库连接后,无需创建新的连接即可检索到SqlConnection对象。连接池提高了执行性能,默认情况下,它处于活动状态。但是,我们将在调试期间关闭连接池,因为在处理从连接池中检索的连接时,无法正确建立相应的调试基础结构。

要禁用连接池,请更新Web.config文件中的NORTHWNDConnectionString,以包含“Pooling=false”的设置。

连接字符串添加名称=“NORTHWNDConnectionString”连接字符串=“数据源=”。/SQLEXPRESS;AttachDbFilename=| DataDirectory |/NORTHWND。中密度纤维板;集成安全性=真;用户实例=真;pooling=false“provider name=”系统。注意:从ASP.NET应用程序调试完SQL Server后,请务必恢复连接池,并删除连接字符串中的池设置或将其设置为“池=真”。

设置之后,我们还需要在存储过程中添加一个断点并开始调试。

第三步:添加断点并调试它们。

打开Products_SelectByCategoryID存储过程,并在SELECT语句的开头设置一个断点。方法单击边框上的适当位置或将光标放在SELECT语句的开头,然后按F9。如图9所示,断点在边框中显示为一个红点。

//files.jb51.net/file_images/article/201605/2016051911474669.png

图4:在Products_SelectByCategoryID存储过程中设置断点。

为了在客户端程序中调试一个SQL数据库对象,需要将数据库设置为支持“应用程序调试”。在服务器资源管理器中,单击节点NORTHWND。MDF,右键单击它,然后选择“应用程序调试”。

//files.jb51.net/file_images/article/201605/2016051911474670.png

图5:确保选择了应用程序调试项目。

设置断点并激活“应用程序调试”项后,我们可以从ASP.NET应用程序调用存储过程进行调试。要调试,请在“调试”菜单中选择“开始调试”,或单击F5或单击工具栏中的绿色小图标。这将打开调试器。

Products_SelectByCategoryID存储过程是在第68章中创建的,它对应的页面(~/advancedal/existingprocs . aspx)包含一个GridView控件来显示存储过程返回的结果。在浏览器中登录页面,当执行过程遇到设置的断点时,页面将返回Visual Studio。正如我们在第一步中看到的,我们可以输入存储过程的语句,查看和检查。

//files.jb51.net/file_images/article/201605/2016051911474671.png

图6:现有程序。aspx页面最初显示饮料产品。

//files.jb51.net/file_images/article/201605/2016051911474672.png

图7:执行存储过程时设置的断点。

在图7所示的Watch窗口中,参数@CategoryID的值为1,这是因为ExistingSprocs.aspx页面最初显示的是饮料产品的信息,而饮料CategoryID的值为1。从下拉列表中选择不同的值。这将导致页面回发并重新执行Products_SelectByCategoryID存储过程。再次遇到断点时,@CategoryID参数的值是您在下拉列表框中选择的CategoryID值。

//files.jb51.net/file_images/article/201605/2016051911474773.png

图8:在下拉列表中选择一个不同的类。

//files.jb51.net/file_images/article/201605/2016051911474774.png

图9:参数@CategoryID反映了在网页上选择的类。

注意:如果登录ExistingSprocs.aspx页面时没有遇到Products_SelectByCategoryID存储过程中设置的断点,请确保选中了ASP.NET应用程序“属性页”的“调试器”区域中的SQL Server项;关闭连接池;激活数据库的应用程序调试项目。如果仍有问题,请重新启动Visual Studio,然后重试。

调试T-SQL数据库对象的远程实例。

在本地计算机上通过Visual Studio进行调试相对来说比较直观和容易,但是如果SQL Server和Visual Studio没有安装在同一台机器上,我们需要做一些设置才能让各方面正常工作。因此,我们需要做两个任务:确保以sysadmin角色通过ADO.NET连接到数据库。

请确保Visual Studio在开发环境中使用的Windows用户帐户是属于sysadmin角色的有效SQL Server登录帐户。

第一项相对简单。首先,确定从ASP.NET应用程序连接到数据库的用户帐户,然后通过SQL Server Management Studio将该帐户添加到sysadmin角色。

其次,用于调试程序的Windows用户帐户必须是连接到远程数据库的有效帐户。问题是,您在本地工作站登录的Windows帐户不一定是登录SQL Server的有效帐户。与其将您的特定登录帐户添加到SQL Server,更好的选择是分配一些Windows用户帐户作为SQL Server调试帐户。然后,要调试远程SQL Server实例的数据库对象,可以使用这些Windows登录帐户的凭据来运行Visual Studio。

举例说明。假设有一个名为SQLDebug的Windows帐户。应该将此帐户添加到远程SQL Server实例中,以便以系统管理员的身份合法登录。如果您想从Visual Studio调试远程SQL Server实例,我们应该使用SQLDebug帐户运行Visual Studio。所以我们可以这样做:注销我们的工作站,使用SQLDebug帐户再次登录,然后运行Visual Studio。但是,有一种更简单的方法,不需要退出工作站。使用runas.exe以SQLDebug的名义运行Visual Studio。这个runas.exe允许应用程序以另一个帐户的名义执行。要以SQLDebug的名义运行Visual Studio,可以在命令行中键入以下语句:

runas.exe/用户: qdebug ' % PROGRAMFILES %/Microsoft Visual Studio 8/common 7/IDE/devenv . exe '

见第《How To: Set SQL Server Permissions for Debugging》条(http://mdsn2.microsoft.com/en-us/library/w1 bhybwz(vs . 80)。aspx)来获得这个过程的更详细的介绍。

注意:如果您的开发机器是Windows XP Service Pack 2,则需要配置互联网连接防火墙以允许远程调试。文章《The How To: Enable SQL Server 2005 Debugging》(http://mdsn2.microsoft.com/en-us/library/s0fk6z6e(vs . 80)。aspx)对此进行了描述,过程包括两个步骤:(a)在Visual Studio所在的主机中,必须将Devenv.exe添加到Exceptions列表中,并打开TCP 135端口;(b)在远程(SQL)机器中,您必须打开TCP端口135,并将Dsqlservr.exe添加到例外列表中。如果您的域策略要求网络通信使用IPSec,则必须打开UDP端口4500和UDP端口500。

结论:

除了支持调试。NET程序代码,Visual Studio还为调试SQL Server 2005提供了多种选项。在本文中,我们研究其中的两个选项:直接数据库调试和应用程序调试。要直接调试T-SQL数据库对象,请在服务器资源管理器中找到该对象,然后右键单击并选择“单步执行.”。这将打开调试器,对象的第一条语句将被终止。此时,您可以输入对象的语句,查看和修改参数值。第一步,我们用这个方法设置Products_SelectByCategoryID的存储过程。

应用程序调试允许直接在数据库对象中设置断点。当客户端程序(如ASP.NET网络程序)调用包含断点的数据库对象时,程序终止并切换到调试器界面。应用程序调试非常有用,因为它可以更清楚地显示程序行为对特定数据库对象的调用。但是,这种方法比直接数据库调试需要更多的配置和步骤。

数据库对象也可以通过SQL Server项目进行调试。在下一章中,我们将研究如何使用SQL Server项目,以及如何使用它来创建和调试托管数据库对象。

编程快乐!

作者简介

Scott Mitchell,本系列教程的作者,也是关于ASP/ASP的六本书的作者。NET,是4GuysFromRolla.com的创始人,自1998年以来一直使用微软的网络技术。你可以点击查看所有教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望能帮助你学习ASP.NET。

版权声明:ASP.NET 2.0中的操作数据72:调试存储过程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。