部署和调试 CLR 存储过程






2.50/5 (6投票s)
2006年10月15日
3分钟阅读

47370
本文将指导您如何部署和调试 CLR 存储过程
引言
大家好,
这里有一些关于部署和调试 CLR 存储过程的酷炫内容,我将在此介绍如何使用 VS 2005 部署和调试 CLR 存储过程。
我建议在阅读本文之前,请先阅读我之前的文章,名为“CLR 存储过程与 T-SQL 存储过程”和“如何创建 CLR 存储过程”。
1. 部署 CLR 存储过程时,您必须拥有“CREATE ASSEMBLY”权限。一旦部署到 SQL Server 上,您就可以在那里看到并执行 CLR 存储过程,如下所示。

2.      在 VS 2005 中创建 CLR 存储过程时,您可能会看到“Test Script”文件夹。该文件夹包含“Test.sql”文件,如果您打开并查看该文件,它会包含针对特定任务(如执行存储过程、用户定义函数等)的各个部分。此脚本文件纯粹用于调试目的。请按照以下步骤调试 CLR 存储过程。  
调试 CLR 存储过程的步骤,
a.      打开“Test.sql”文件,并将以下代码添加到文件末尾。
EXEC dbo.GetRoles 
-- 在名为“如何创建 CLR 存储过程”的前一篇文章中创建  
EXEC dbo.PrintDate 'This will go into txt file'
b.      “PrintDate”存储过程访问外部资源,如文件系统。此存储过程正在写入一个文件。访问外部资源时,需要“TRUSTWORTHY”权限。
c.      执行以下命令以获得“TRUSTWORTHY”权限。
ALTER DATABASE Database_Name SET TRUSTWORTHY ON  
d.      以下是“PrintDate”CLR 存储过程的代码。
 [Microsoft.SqlServer.Server.SqlProcedure]
       public static void PrintDate(string name)
        {
            
            SqlPipe p;
            p = SqlContext.Pipe;
FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\TestFile.txt");
            filePerm.Assert();
            StreamWriter sw = new StreamWriter(@"C:\TestFile.txt");
            sw.WriteLine(name);
            sw.Flush();
            sw.Close();
            p.Send(System.DateTime.Today.ToString());
using (SqlConnection connection = new 
SqlConnection("context connection=true"))
            {
            connection.Open();
SqlCommand command = new SqlCommand("SELECT * FROM     Department", connection);
            SqlDataReader reader = command.ExecuteReader();
                  reader.Read();
                  SqlContext.Pipe.Send(reader);
            }
     }
e.      由于“PrintDate”CLR 存储过程访问外部资源,如上所述,我们需要在部署 CLR 存储过程之前,在 VS 2005 中纳入此更改,如下所示。以下屏幕显示将“Permission Level”设置为“External”。  
 
 
f.       现在我假设您已成功部署 CLR 存储过程,并在“Test.sql”中纳入了相应的执行命令。
g.      在“PrintDate”函数中设置断点,然后在 VS 2005 中运行应用程序。应用程序会在断点处停止,就像任何 .NET 应用程序一样。
 
    
h.      执行完成后,您可以看到“TestFile.txt”文件已生成,其中包含作为输入参数传递给 CLR 存储过程的文本,查看“Output”窗口,其中包含“GetRole”CLR 存储过程的结果以及“PrintDate”函数的 SQL 语句 "SELECT * FROM     Department" ,如下所示。
 
 
3.      要启用 SQL Server 上的 CLR,请在特定数据库上执行以下查询。
EXEC sp_configure 'show advanced options' , '1';
go
reconfigure;
go
EXEC sp_configure 'clr enabled' , '1'
go
reconfigure;
-- 将高级选项重新关闭
EXEC sp_configure 'show advanced options' , '1';
go
