博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用SQL Server的CLR集成
阅读量:7027 次
发布时间:2019-06-28

本文共 2288 字,大约阅读时间需要 7 分钟。

公共语言运行库 (CLR) 是 Microsoft .NET Framework 的核心,为所有 .NET Framework 代码提供执行环境。在 CLR 中运行的代码称为托管代码。CLR 提供执行程序所需的各种函数和服务,包括实时 (JIT) 编译、分配和管理内存、强制类型安全性、异常处理、线程管理和安全性。

通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合函数。因为托管代码在执行之前会编译为本机代码,所以,在有些方案中可以大大提高性能。

托管代码使用代码访问安全性 (CAS)、代码链接和应用程序域来阻止程序集执行某些操作。SQL Server 2005 使用 CAS 帮助保证托管代码的安全,并避免操作系统或数据库服务器受到威胁。

一、部署和编译CLR集成

CLR集成功能在system.data.dll的程序集中公开,该程序集是.Net Framework的一部分,在全局程序集缓存(GAC)以及.Net Framework中可以找到它。

System.data.dll程序集包括以下命名空间,这些命名空间是编译CLR数据库所必须的:

System.Data; System.Data.Sql; Microsoft.SqlServer.Server; System.Data.SqlTypes.

1、编写一个类文件,以helloWord.cs实现存储过程为例,

编写文件名为helloWord.cs的类文件,实现在SQL中“Hello world!20080102”输出,其代码如下:

using System;

using System.Data;

using Microsoft.SqlServer.Server;

using System.Data.SqlTypes;

 

public class HelloWorldProc

{

    [Microsoft.SqlServer.Server.SqlProcedure]

    public static void HelloWorld()

    {

        SqlContext.Pipe.Send("Hello World!/n20080102/n");

    }

}

2、编译上述“helloWord”存储过程

运行cmd.exe,在.NET Framework的安装路径下,使用 /target 选项启动 Visual C# 或 Visual Basic 编译器,以指定生成一个库 DLL。例如编译保存在E盘根目录下的“helloWord.cs”,

则执行语句如下:

C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727>csc /target:library e:/helloWord.cs

如下图所示:

 

 

编译成功后,系统将在.Net Framework的安装路径下,创建一个名为helloWord.dll的库。

二、在SQL Server中运行CLR

1、在SQL Server中启用CLR

默认情况下,Microsoft SQL Server 中禁用公共语言运行库 (CLR) 集成功能,必须启用才能使用通过 CLR集成实现的对象。

通过系统存储过程“SP_Configure”启用CLR:

EXEC SP_CONFIGURE 'clr enabled',1

GO

RECONFIGURE

GO

2、在SQL Server中加载和运行上述“helloWord”存储过程

在“helloWord”存储过程编译成功后,通过“CREATE ASSEMBLY”创建名称为“helloword”的程序集,SQL语句如下:

CREATE ASSEMBLY helloword from'C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/helloWord.dll'

WITH PERMISSION_SET=SAFE

注:

SQL Server主机策略级权限集有三种:

(1)       SAFE:只允许内部计算和本地数据访问。SAFE是强制性最强的权限集。通过具有SAFE权限的程序集执行的代码无法访问外部系统资源,例如文件、网络、环境变量或注册表。

(2)       EXTERNAL_ACCESS:与SAFE权限集类似,但是可以访问外部系统资源,例如文件、网络、环境变量和注册表。

(3)   UNSAFE:允许程序集对资源进行不受限制的访问,无论在SQL SERVER内部还是外部,从UNSAFE程序集中执行的代码可以调用非托管代码。

在“helloword”程序集创建成功后,通过“CREATE PROCEDURE”创建名称为“hello”的存储过程来访问“helloWord”方法,SQL语句如下:

CREATE PROCEDURE hello

AS

EXTERNAL NAME helloword.HelloWorldProc.HelloWorld

在“hello”存储过程创建成功后,运行“EXEC hello”,系统将SQL Server Management Studio 消息窗口中输出如下信息:

Hello World!

20080102

2、从测试数据库中删除刚才创建的“helloWord”存储过程示例

DROP PROCEDURE hello         --删除存储过程

GO

DROP ASSEMBLY helloword     --删除程序集

GO

转载地址:http://uurxl.baihongyu.com/

你可能感兴趣的文章
Android开发之Activity转场动画
查看>>
List集合三种遍历方法
查看>>
【译】OpenDaylight控制器:YANG Schema和Model
查看>>
C#访问修饰符(public,private,protected,internal,sealed,abstract)
查看>>
android消息线程和消息队列
查看>>
EXCEL中计算不重复单元格的个数
查看>>
二层设备与三层设备的区别--总结
查看>>
安装pytorch成功但cuda不可用
查看>>
unity__DrawCall的理解
查看>>
springboot架构下运用shiro后在configuration,通过@Value获取不到值,总是为null
查看>>
SQLServer 数据库镜像+复制切换方案
查看>>
Postman初探
查看>>
仿淘宝头像上传功能(一)——前端篇。
查看>>
Eclipse通过集成svn实现版本控制
查看>>
OS开发过程中常用开源库
查看>>
关于在多个UItextield切换焦点
查看>>
hdu 2768
查看>>
git记住用户名密码
查看>>
ElasticSearch(2)-安装ElasticSearch
查看>>
从mysql数据表中随机取出一条记录
查看>>