演练:调试扩展存储过程
本主题适用于:
Visual Studio 旗舰版 |
Visual Studio 高级专业版 |
Visual Studio 专业版 |
Visual Studio 速成版 |
---|---|---|---|
提示
不推荐使用扩展存储过程。尽管它们在 ASP.NET 中仍然支持向后兼容,但该支持将在以后版本中删除。
扩展存储过程的引入是为了启用在 Transact-SQL 中无法完成的操作,如访问文件系统、读取注册表等。既然可以通过编写 SQL CLR 过程来完成这些操作,则无需编写扩展存储过程。强烈建议您不要编写新的扩展存储过程,而考虑用同等但更安全的 SQL CLR 存储过程替换现有的存储过程。
扩展存储过程是指用 C++ 或任何其他语言编写的 DLL,而不是用 SQL 编写的。因此,调试扩展存储过程与调试用该语言编写的任何 DLL 很相似。
提示
扩展存储过程通常是使用本机 C++ 编写的,而且缺少托管代码所提供的保护。应认真测试扩展存储过程,因为 bug 有可能会使 SQL Server 崩溃。若要避免可能的数据丢失和其他问题,请勿在生产服务器上调试扩展存储过程。有关更多信息,请参见 ASP.NET 联机丛书。
显示的对话框和菜单命令可能会与帮助中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在**“工具”菜单上选择“导入和导出设置”**。有关更多信息,请参见 Visual Studio Settings。
调试扩展存储过程
从扩展存储过程 DLL 的调试版本开始。还需要调用要调试的扩展存储过程的应用程序。如果没有这样的应用程序,请执行下列操作之一:
针对包含扩展存储过程和用于调用扩展存储过程的代码的数据库,创建带数据连接的 Visual Studio 数据库项目。
创建可调用扩展存储过程的 SQL 脚本文件。
- 或 -
使用一个应用程序,如包含在 SQL Server 中的 SQL Server Management Studio 或包含在 ODBC SDK 中的 ODBC Test。
如果 SQL Server 当前正在作为服务运行,请通过打开**“服务”控制面板,选择“SQL Server”,再单击“停止”**停止它。
将 DLL 的调试版本复制到 Sqlservr.exe 所驻留的目录或搜索路径中的任何目录。
- 或 -
设置后期生成事件,以便按以下方式复制 C++ 项目中的 DLL:
打开**“<项目> 的属性页”**对话框。
在**“<项目> 的属性页”对话框中,打开“配置属性”**文件夹。
在**“配置属性”下,打开“生成事件”**文件夹。
选择**“后期生成事件”**。
在**“命令行”**旁边的网格控件中,键入复制命令,如下面的示例:
Copy c:\MyProjects\MyXProc\debug\MyXProc.dll C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn
注册扩展存储过程。
将 SQL Server 指定为扩展存储过程 DLL 的调用可执行文件和工作目录。修改**“<项目> 的属性页”对话框中的设置,您可以在“配置属性”的“调试”**类别中访问这些设置,如下所示:
如果 SQL Server 已安装在默认位置,请在**“命令”**框中键入 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\SQLSERVR.EXE。
将**“工作目录”**项设置为 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn。
将**“命令参数”项设置为 -c。-c** 选项指示 SQL Server 正在从命令行启动,并且不是作为服务,这将导致 SQL Server 的启动更为迅速。SQL Server 在 Visual Studio 调试环境的控制下将不作为服务启动,而是作为控制台应用程序启动。这将确保正确地捕获和处理断点。
在扩展存储过程的源代码中设置断点。
使用执行命令启动调试会话。有关更多信息,请参见执行控件。
控制台窗口将随着 SQL Server 的启动而出现。文本滚动停止后,最后的消息将显示:
启动了启动过程 'sp_sqlregister'
SQL Server 已启动并开始处理请求。
执行扩展存储过程。
调试器在到达包含断点的行时将中断。
有关如何编写扩展存储过程的更多信息,请查询 MSDN 库中 Microsoft 知识库的 SQL Server 部分或 SQL Server 文档的“Programming Extended Stored Procedures”(扩展存储过程编程)部分。