65.9K
CodeProject 正在变化。 阅读更多。
Home

部署和调试 CLR 存储过程

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.50/5 (6投票s)

2006年10月15日

3分钟阅读

viewsIcon

47370

本文将指导您如何部署和调试 CLR 存储过程

引言

大家好,

 

这里有一些关于部署和调试 CLR 存储过程的酷炫内容,我将在此介绍如何使用 VS 2005 部署和调试 CLR 存储过程。

我建议在阅读本文之前,请先阅读我之前的文章,名为“CLR 存储过程与 T-SQL 存储过程”和“如何创建 CLR 存储过程”。

1.      部署 CLR 存储过程时,您必须拥有“CREATE ASSEMBLY”权限。一旦部署到 SQL Server 上,您就可以在那里看到并执行 CLR 存储过程,如下所示。

Sample screenshot

 

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”。 

Sample screenshot 

f.       现在我假设您已成功部署 CLR 存储过程,并在“Test.sql”中纳入了相应的执行命令。

g.      在“PrintDate”函数中设置断点,然后在 VS 2005 中运行应用程序。应用程序会在断点处停止,就像任何 .NET 应用程序一样。

Sample screenshot    

h.      执行完成后,您可以看到“TestFile.txt”文件已生成,其中包含作为输入参数传递给 CLR 存储过程的文本,查看“Output”窗口,其中包含“GetRole”CLR 存储过程的结果以及“PrintDate”函数的 SQL 语句 "SELECT * FROM     Department" ,如下所示。

Sample screenshot 

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

 

© . All rights reserved.