使用 Sql 2005 中集成CLR功能开发基于C#的应用

在SQL 2005 中集成了CLR 运行库

如果开发非图形界面的数据库应用可以考虑使用此功能。

SQL2005 附带一个服务叫作业,我们可能很好的利用这个服务来实现我们的实时任务功能

比如说系统会定时给库中的会员下发邮件。或者去定期处理话单 FTP

首先我们不要图形界面,我们的业务逻辑必需有数据库的支持。但我们的业务只用SQL Server 存储过程又力不从心

这个时候SQL CLR 是最好的选择!

1.首先我们对数据库做修改,好能去安全执行业务

--1打开数据库的TRUSTWORTHY安全属性
ALTER DATABASE DNT2 SET TRUSTWORTHY ON
go

--2删除将创建的存储过程
drop procedure testPro
--3删除将创建的程序集
drop assembly Test
go

--4创建一个程序集
create assembly Test
from 'c:\assembly\test.dll'
with PERMISSION_SET = EXTERNAL_ACCESS
go

注意:在第四步的操作创建程序集,FROM 语句直接将 DLL 文件复制到SQL Server 的内存中然后去分析执行,语句执行完成后原始的DLL 文件可以直接删除

--5创建存储过程
create procedure testPro
(
 @i int
)
as external name Test.[Test.MainX].ReaderHTML
go

注意:在第五步的操作创建存储过程中命名空间和类型名称类型必需用[]号括起来

--测试存过程
declare @i int
execute @i = testPro 1

 

以下为CS 的代码 生成选择直接用程序集

/**********************************
cs 代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace Test
{
    [ComVisible(true)]
    public class MainX
    {

     注意:在SQL 中运行的方法必需为静态,加上SqlProcedure属性标注
        [Microsoft.SqlServer.Server.SqlProcedure()]
        public static void ReaderHTML(int x)
        {
            return;

            using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("context connection=true"))
            {
                System.Data.SqlClient.SqlCommand cmd = conn.CreateCommand();
                cmd.CommandText = "SELECT [id],[displayorder],[type],[code],[url]  FROM [dnt_smilies]";
                System.Data.IDataReader reader= cmd.ExecuteReader();
                while (reader.Read())
                {
                    Microsoft.SqlServer.Server.SqlContext.Pipe.Send(reader.GetInt32(0).ToString());
                }
                reader.Close();
            }
        }
    }
}
**********************************/

posted @ 2010-03-11 15:45  徐小朝  阅读(243)  评论(0编辑  收藏  举报