演练:调试扩展存储过程

本主题适用于:

Visual Studio 旗舰版

Visual Studio 高级专业版

Visual Studio 专业版

Visual Studio 速成版

6c02e2k1.DoesApplybmp(zh-cn,VS.100).gif 6c02e2k1.DoesApplybmp(zh-cn,VS.100).gif 6c02e2k1.DoesApplybmp(zh-cn,VS.100).gif 6c02e2k1.DoesNotApplybmp(zh-cn,VS.100).gif

提示

不推荐使用扩展存储过程。尽管它们在 ASP.NET 中仍然支持向后兼容,但该支持将在以后版本中删除。

扩展存储过程的引入是为了启用在 Transact-SQL 中无法完成的操作,如访问文件系统、读取注册表等。既然可以通过编写 SQL CLR 过程来完成这些操作,则无需编写扩展存储过程。强烈建议您不要编写新的扩展存储过程,而考虑用同等但更安全的 SQL CLR 存储过程替换现有的存储过程。

扩展存储过程是指用 C++ 或任何其他语言编写的 DLL,而不是用 SQL 编写的。因此,调试扩展存储过程与调试用该语言编写的任何 DLL 很相似。

提示

扩展存储过程通常是使用本机 C++ 编写的,而且缺少托管代码所提供的保护。应认真测试扩展存储过程,因为 bug 有可能会使 SQL Server 崩溃。若要避免可能的数据丢失和其他问题,请勿在生产服务器上调试扩展存储过程。有关更多信息,请参见 ASP.NET 联机丛书。

显示的对话框和菜单命令可能会与帮助中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在**“工具”菜单上选择“导入和导出设置”**。有关更多信息,请参见 Visual Studio Settings

调试扩展存储过程

  1. 从扩展存储过程 DLL 的调试版本开始。还需要调用要调试的扩展存储过程的应用程序。如果没有这样的应用程序,请执行下列操作之一:

    • 针对包含扩展存储过程和用于调用扩展存储过程的代码的数据库,创建带数据连接的 Visual Studio 数据库项目。

    • 创建可调用扩展存储过程的 SQL 脚本文件。

      - 或 -

    • 使用一个应用程序,如包含在 SQL Server 中的 SQL Server Management Studio 或包含在 ODBC SDK 中的 ODBC Test。

  2. 如果 SQL Server 当前正在作为服务运行,请通过打开**“服务”控制面板,选择“SQL Server”,再单击“停止”**停止它。

  3. 将 DLL 的调试版本复制到 Sqlservr.exe 所驻留的目录或搜索路径中的任何目录。

    - 或 -

    设置后期生成事件,以便按以下方式复制 C++ 项目中的 DLL:

    1. 打开**“<项目> 的属性页”**对话框。

    2. 在**“<项目> 的属性页”对话框中,打开“配置属性”**文件夹。

    3. 在**“配置属性”下,打开“生成事件”**文件夹。

    4. 选择**“后期生成事件”**。

    5. 在**“命令行”**旁边的网格控件中,键入复制命令,如下面的示例:

      Copy c:\MyProjects\MyXProc\debug\MyXProc.dll C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn

  4. 注册扩展存储过程。

  5. 将 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 调试环境的控制下将不作为服务启动,而是作为控制台应用程序启动。这将确保正确地捕获和处理断点。

  6. 在扩展存储过程的源代码中设置断点。

  7. 使用执行命令启动调试会话。有关更多信息,请参见执行控件

    控制台窗口将随着 SQL Server 的启动而出现。文本滚动停止后,最后的消息将显示:

    启动了启动过程 'sp_sqlregister'

    SQL Server 已启动并开始处理请求。

  8. 执行扩展存储过程。

    调试器在到达包含断点的行时将中断。

    有关如何编写扩展存储过程的更多信息,请查询 MSDN 库中 Microsoft 知识库的 SQL Server 部分或 SQL Server 文档的“Programming Extended Stored Procedures”(扩展存储过程编程)部分。

请参阅

概念

调试 Transact-SQL