七十二调试存储过程Word文档格式.docx
- 文档编号:21322166
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:10
- 大小:208.25KB
七十二调试存储过程Word文档格式.docx
《七十二调试存储过程Word文档格式.docx》由会员分享,可在线阅读,更多相关《七十二调试存储过程Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
本文我们将考察如何在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》(Studio里调试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》(
第一步:
直接进入储存过程
使用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”设置.
?
1
2
3
4
5
6
<
connectionStrings>
addname="
NORTHWNDConnectionString"
connectionString=
"
DataSource=./SQLEXPRESS;
AttachDbFilename=|DataDirectory|/NORTHWND.MDF;
IntegratedSecurity=True;
UserInstance=True;
Pooling=false"
providerName="
System.Data.SqlClient"
/>
/connectionStrings>
一旦你完成从ASP.NET应用程序对SQLServer的调试后,务必还原连接池,在连接字符串里将Pooling设置删除或设置为“Pooling=true”.
完成设置后,我们还需要对存储过程添加一个断点,并开始调试
第三步:
添加断点并调试
打开Products_SelectByCategoryID存储过程,在SELECT
statement的开头部分设置断点。
方法点击边框恰当的地方或将光标放在SELECT
statement开始的地方再按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和VisualStudio没有装在同一台机器上的话,我们需要做一些设置以使各方面工作正常,为此我们要做2方面的工作:
.确保以系统管理员的角色(sysadminrole)通过ADO.NET连接到数据库
.确保开发环境上VisualStudio使用的Windowsuser帐户是一个有效的属于系统管理员的角色(sysadminrole)的SQLServer登录帐户.
第一项相对比较简单.首先确定从ASP.NET应用程序连接到数据库的用户帐户,接下来通过SQLServerManagementStudio,将该帐户添加到sysadmin角色.
第二项,你用来调试程序的Windowsuser帐户必须是连接到远程数据库的一个有效帐户,问题就在于你在本地工作站登录的Windows帐户不一定就是登录SQLServer的有效帐户.与其将你具体的登录帐户添加给SQLServer,一个更好的选择是将一些Windowsuser帐户分配为SQLServer调试帐户(SQLServerdebuggingaccount).然后,要调试一个远程SQLServer实例的数据库对象的话,你可以使用这些Windows登录帐户的认证(credentials)来运行VisualStudio.
用一个例子来进行阐述。
假设有个Windows帐户,名为SQLDebug.该帐户应该添加到远程SQLServer实例,以系统管理员角色进行合法登录.然后要从VisualStudio来调试远程SQLServer实例的话,我们应该以SQLDebug帐户来运行VisualStudio.于是我们可以这样来操作:
退出我们的工作站,以SQLDebug帐户再次登录,然后运行VisualStudio.不过还有一个更简单点的方法,不用退出工作站,通过使用runas.exe来以SQLDebug的名义运行VisualStudio.这个runas.exe允许一个应用程序假借另一个帐户的名义来执行.要以SQLDebug的名义来运行VisualStudio的话,你可以在命令行键入如下的statement:
runas.exe/user:
SQLDebug"
%PROGRAMFILES%/MicrosoftVisualStudio8/Common7/IDE/devenv.exe"
关于该过程的更详细介绍请参阅文章《HowTo:
SetSQLServerPermissionsforDebugging》(
如果你的开发机为WindowsXPServicePack2版本的话,你需要对Internet连接防火墙进行配置以允许远程调试。
文章《TheHowTo:
EnableSQLServer2005Debugging》(Studio所在的主机,你必须向Exceptionslist添加Devenv.exe,并打开TCP135端口;
(b)在远程(SQL)机器,你必须打开TCP135端口,且向Exceptionslist添加Dsqlservr.exe.如果你的域策略(domainpolicy)需要通过IPSec来进行网络通信(networkcommunication)的话,你必须打开UDP4500和UDP500端口。
结语:
除了支持对.NET程序代码进行调试外,VisualStudio也提供了对SQLServer2005进行调试的多种选择.在本文,我们考察了这些选择中的2种:
直接数据库调试(DirectDatabaseDebugging)以及应用程序调试.要直接对一个T-SQL数据库对象进行调试的话,在服务器资源管理器里找到该对象,再右键单击选“StepInto…”.这将打开调试器,且运行到该对象的第一条statement就终止了.此时,你可以进入该对象的statements,查看并修改参数值.在第一步,我们用该方法对Products_SelectByCategoryID存储过程进行了设置.
应用程序调试允许直接在数据库对象里设置断点.当一个客户端程序(比如一个ASP.NETweb程序)调用一个包含断点的数据库对象时,程序终止且切换到调试器界面。
应用程序调试很有用,因为它更清楚的显示了到底是什么程序行为调用了某个具体的数据库对象.然而,该方法比直接数据库调试要多一些配置和步骤.
数据库对象也可以通过SQLServerProjects来进行调试,在下一章我们将考察使用SQLServerProjects,以及如何利用其来创建和调试管理数据库对象(manageddatabaseobjects)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 七十二 调试 存储 过程