七十二调试存储过程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

在ASP.NET2.0中操作数据之七十二:调试存储过程作者:heker2007字体:[增加减小]类型:转载时间:2016-05-19我要评论在开发过程中,使用VisualStudio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样VisualStudio也支持对SQLServer里面的存储过程进行调试,下面就让我们看看具体的调试方法。导言:VisualStudio有很多的调试功能.我们只需要稍稍点点鼠标,敲敲键盘就可以使用断点(breakpoints)来打断某个程序的执行,并查看其状态.除了调试代码以外,VisualStudio也支持对SQLServer里面的存储过程进行调试.就像可以在ASP.NET页面的后台代码类或BusinessLogicLayerclass类里设置断点一样,我们也可以在存储过程里设置断点.本文我们将考察如何在VisualStudio的ServerExplorer里进入存储过程并设置断点.当ASP.NET程序调用该存储过程时就会碰到该断点.注意:不幸的是只能在VisualStudio的Professional和TeamSystems版本里才能对存储过程设置断点.如果你使用的是VisualWebDeveloper或VisualStudio的标准版,你就只能看教程是如何一步步的做的,但不能在自己的机器上实践.SQLServer调试主题MicrosoftSQLServer2005集合了公共语言运行库(CommonLanguageRuntime(CLR)),它可以被所有.NET模块使用.因此SQLServer2005支持对数据库对象的管理.我们可以创建数据库对象,比如存储过程、用户定义的函数((UDFs)等,就像在一个C#类里定义的方法一样.你可以在从.NETFramework或自己定义的类里使用这些存储过程和自定义函数.当然,SQLServer2005也支持T-SQL数据库对象.SQLServer2005支持对T-SQL数据库对象以及管理数据库对象(manageddatabaseobjects)的调试.不过只能在VisualStudio2005专业版或TeamSystems版本里才行.本文我们将考察对T-SQL数据库的调试.后面的教程我们将考察对管理数据库对象的调试.文章《OverviewofT-SQLandCLRDebugginginSQLServer2005》()归纳了在VisualStudio里调试SQLServer2005对象的3种途径:.直接数据库调试(DDD)—在服务器资源管理器里进入某个T-SQL数据库对象,比如存储过程或用户定义函数UDFs.我们将在第一步考察该模式..应用程序调试—我们可以在一个数据库对象里设置断点,然后再返回到一个ASP.NET应用程序.当执行这些数据库对象时,将遇到断点并转到调试器.注意,在应用程序调试模式,我们不能在应用程序代码里打入一个数据库对象,所以我们必须直接在这些存储过程或用户义函数里设置断点.我们将在第二步考察该模式..通过一个SQLServerProject来调试VisualStudio专业版及TeamSystems版包含一个SQLServerProject类型,它通常用来创建管理数据库对象(manageddatabaseobjects),我们将在后面的教程考察SQLServerProjects及如何调试其内容.VisualStudio可以对本地或外部SQLServer实例进行调试。如果你使用的SQLServer数据库不在本地,那么自然,它就是一个外部实例.本文我们将使用本地SQLServer实例,调试外部SQLServer实例的存储过程要比调试本地的多出一些步骤.如果你使用的是一个本地SQLServer实例,那么你可以从第一步看到结尾.如果你使用的是外部SQLServer实例,那么你首先要确保是以Windowsuser帐户登录电脑,且包含一个连接到外部SQLServer实例的登录界面.此外,应全部以系统管理员角色登录.你可以参阅本文结尾的“DebuggingT-SQLDatabaseObjectsonRemoteInstances”部分,查看如何配置VisualStudio和SQLServer以调试外部实例.最后,我们应该明白支持T-SQL数据库对象调试的特性没有支持.NET应用程序调试的特性丰富.比如,不支持断点条件过滤(breakpointconditionsandfilters),只能用到寥寥几个调试窗口;你无法使用Edit和Continue等等。更多详情请参阅文章《LimitationsonDebuggerCommandsandFeatures》((VS.80).aspx)第一步:直接进入储存过程使用VisualStudio我们可以很容易地直接进入一个数据库对象。我们来看如何使用DirectDatabaseDebugging(DDD)特性进入Northwind数据库里的Products_SelectByCategoryID存储过程.就像其名字揭示的那样,该存储过程返回特定category的产品信息。我们在第68章创建了该存储过程,在服务器资源管理器里展开Northwind数据库节点,接下来进入存储过程文件夹,在Products_SelectByCategoryID存储过程上右键单击,选“StepIntoStoredProcedure”,这将打开调试器.因为该存储过程接受一个@CategoryID输入参数,我们输入1,这将返回“饮料”类产品的信息。图1:使用值为“1”的@CategoryID输入参数指定@CategoryID参数的值后,就可以执行存储过程了.不过调试器执行完第一条Statement后就中止了,而不会完全运行存储过程.。注意边框上的黄色箭头,它指出了Statement在存储过程的当前位置.你可以在Watch窗口查看或编辑参数值,或者改写存储过程用到的参数名称.图2:调试器调试完第一条Statement后就中止了希望一次只调试一条statement语句的话,点击工具栏上的“StepOver”按钮或按F10键。由于Products_SelectByCategoryID存储过程只包含了一条SELECTstatement,所以按F10键将跨过这条语句并完成存储过程的执行。执行完毕后,其结果将显示在Output窗口里,调速器也就中止了.注意:T-SQL调试发生在statement级别,但对SELECTstatement无效第二步:为Website设置应用程序调试直接在服务器资源管理器里调试存储过程时需要手动设置,但很多时候我们感兴趣的是,当在ASP.NET应用程序里调用存储过程时才对其进行调试。当一个设置了断点的存储过程被应用程序调用,在执行过程中将遇到这个断点。我们可以查看和改变存储过程的参数值,就像我们在第一步做的那样.不过在次此之前我们需要将ASP.NETweb应用程序与SQLServer调试器联系起来.在解决方案资源管理器里,在website名称(ASPNET_Data_Tutorial_74_CS)上右键单击,选“PropertyPages”项,再在左边选“StartOptions”,选中Debuggers区域的SQLServer选择框,如图3:图3:在应用程序的属性页选择SQLServer方框另外,我们还要更新数据库连接字符串以禁用“连接池”。当关闭一个数据库的连接时,一个对应的SqlConnection对象将存放在连接池里。当建立一个数据库连接时,就可以重新获取该SqlConnection对象而用不着再创建一个新的连接.连接池提高了执行性能,默认时,其处于激活状态.不过在调试时我们将关闭连接池,因为处理从连接池检索来的连接时,不能正确的建立相应的调试基础构造(debugginginfrastructure).要禁用连接池的话,更新Web.config文件的NORTHWNDConnectionString,包含一个“Pooling=false”设置.?123456connectionStringsaddname=NORTHWNDConnectionStringconnectionString=DataSource=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/NORTHWND.MDF;IntegratedSecurity=True;UserInstance=True;Pooling=falseproviderName=System.Data.SqlClient//connectionStrings注意:一旦你完成从ASP.NET应用程序对SQLServer的调试后,务必还原连接池,在连接字符串里将Pooling设置删除或设置为“Pooling=true”.完成设置后,我们还需要对存储过程添加一个断点,并开始调试第三步:添加断点并调试打开Products_SelectByCategoryID存储过程,在SELECTstatement的开头部分设置断点。方法点击边框恰当的地方或将光标放在SELECTstatement开始的地方再按F9。如图9所示,断点在边框呈现为一个红色圆点.图4:在Products_SelectByCategoryID存储过程设置断点为了在客户端程序对一个SQL数据库对象进行调试,我们有必要设置数据库支持“应用程序调试”(applicationdebugging),在服务器资源管理器里点到NORTHWND.MDF节点,右键单击,选“ApplicationDebugging”.图5:确保选中ApplicationDebugging项当设置好断点且激活“ApplicationDebugging”项时,我们就可以从ASP.NET应用程序调用存储过程来进行调试。要调试的话,在“调试”菜单里选“开始调试”,或点F5或点工具栏里的绿色小图标。这将开启调试器.Products_SelectByCategoryID存储过程是在第68章创建的,其对应的页面(~/AdvancedDAL/ExistingSprocs.aspx)包含了一个GridView控件,以显示该存储过程返回的结果.在浏览器里登录该页面,当执行过程遇到设置的断点时页面将返回到VisualStudio,就像在第一步看到的那样,我们可以进入存储过程的statements,查看并修改参数值.图6:ExistingSprocs.aspx页面最开始显示的是饮料类的产品图7:执行到存储过程设置的断点在如图7所示的Watch窗口,参数@CategoryID的值为1,这是由于ExistingSprocs.aspx页面最开始显示的是饮料类产品的信息,而饮料类的CategoryID值为1.在下拉列表里选择一个不同的值。这将导致页面回传并重新执行Products_SelectByCategoryID存储过程。再次遇到断点时,@CategoryID参数的值就是你在下拉列表框里选择的CategoryID值.图8:在下拉列表里选择一个不同的类图9:参数@CategoryID反映的是在Web页面选择的类注意:如果你登录ExistingSprocs.aspx页面时,没有碰到在Products_SelectByCategoryID存储过程里设置的断点,一定要确保ASP.NET应用程序的“属性页”的Debuggers区域的SQLServer项被选中;关闭连接池;激活数据库的ApplicationDebugging项.如果仍然还有问题的话,重新启动VisualStudio并再试一次.调试T-SQL数据库对象的远程实例在本地电脑上通过VisualStudio调试是比较直观容易的,但如果SQLServer和Visua

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功