在SQL Server 2005中运行CLR
来源:互联网 发布:通辽网络优化工程师 编辑:程序博客网 时间:2024/05/18 03:11
一个简单的创建SQLCLR的实例:
- SQL:启用SQLCLREXEC sp_configure 'clr enabled', 1 -- 在默认情况下,SQL Server 2005中该属性是置为0的。
Reconfigure With Override - 创建源代码
对于SQLCLR其是使用CLR语言来编写存储过程(函数以及触发器等,本质上还是存储过程)。故其是面向过程的,其只能调用类的方法,且必须是 public 且 static 的方法,SQLCLR不会去创建一个类的实例。
以下是一个简单的.cs文件编译成.dll后加载入SQL Server在上述代码中,使用了上下文对象。这种对象用于访问已激活的SQLCLR环境。///////////////////////////////////////////////////////////////////////
// ** HiCsWorld.cs **
using System;
using Microsoft.SqlServer.Server; // 该名称空间位于System.Data.dll程序集中
namespace CsTestNamespace
{
public static class CsTestClass
{
public static void SayHi()
{
SqlContext.Pipe.Send("Hi C# World from SQL Server!"); // 调用SqlContext上下文对象输出一行文本
}
public static void GetCsGreeting(string name, out string greeting) // 用以创建带参数的存储过程
{
greeting = String.Format("Hello from C#, {0}", name);
}
}
}
/////////////////////////////////////////////////////////////////////// - 安装程序集并注册存储过程--------------------------------------------------------------------
Create Assembly CsProcs From 'C:SQLCLR_SampleHiCsWorld.dll'
With Rermission_Set=SAFE
Go
Create Procedure SayCsHi
As External Name CsProcs.[CsTestNamespace.CsTestClass].SayHi
--------------------------------------------------------------------
注册程序集时,可以设置三种执行权限:
SAFE 只能访问CLR代码和数据库中的数据。不能访问非托管代码、外部资源和线程管理。
Exteernal_Access 可以访问外部资源(文件系统、事件日志、网络以及其他数据库服务器)。不能访问非托管代码。
UNSAFE 对访问对象不做任何限制,在有COM组件时必须使用该安全级别。
注:对于后两种执行权限,必须将数据库的Trustworthy属性置为On。
Alter Database Northwind Set Trustworthy On
以下是一个带参数的存储过程示例:(.dll文件即上述"HiCsWorld.cs")
Create Procedure GetCsGreeting -- 创建存储过程
@name nvarchar(50),
@greeting nvarchar(100)
As External Name CsProcs.[CsTestNamespace.CsTestClass].GetCsGreeting
Declare @Result nvarchar(100) -- 调用该存储过程,注意输出参数的使用
Exec GetCsGreeting 'Current User', @Result Output
Select @Result
@name nvarchar(50),
@greeting nvarchar(100)
As External Name CsProcs.[CsTestNamespace.CsTestClass].GetCsGreeting
Declare @Result nvarchar(100) -- 调用该存储过程,注意输出参数的使用
Exec GetCsGreeting 'Current User', @Result Output
Select @Result
以下是一个返回行集(Table)数据的CLRSQL存储过程
///////////////////////////////////////////////////////////////////////
// ** HiCsWorld.cs **
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace CsTestNamespace
{
public static class CsTestClass
{
public static void GetWords(Int32 rowSum)
{
SqlDataRecord rec = new SqlDataRecord(
new SqlMetaData("Index", SqlDbType.Int),
new SqlMetaData("Word", SqlDbType.NVarChar, 50)); // 定义列的结构
SqlContext.Pipe.SendResultsStart(rec);
for (Int32 i = 0; i < rowSum; i++)
{
rec.SetInt32(0, i);
rec.SetString(1, String.Format("Word{0,2}", i.ToString()));
SqlContext.Pipe.SendResultsRow(rec); // 逐行写入列值
}
SqlContext.Pipe.SendResultsEnd();
}
}
}
///////////////////////////////////////////////////////////////////////
// ** HiCsWorld.cs **
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace CsTestNamespace
{
public static class CsTestClass
{
public static void GetWords(Int32 rowSum)
{
SqlDataRecord rec = new SqlDataRecord(
new SqlMetaData("Index", SqlDbType.Int),
new SqlMetaData("Word", SqlDbType.NVarChar, 50)); // 定义列的结构
SqlContext.Pipe.SendResultsStart(rec);
for (Int32 i = 0; i < rowSum; i++)
{
rec.SetInt32(0, i);
rec.SetString(1, String.Format("Word{0,2}", i.ToString()));
SqlContext.Pipe.SendResultsRow(rec); // 逐行写入列值
}
SqlContext.Pipe.SendResultsEnd();
}
}
}
///////////////////////////////////////////////////////////////////////
- 在SQL Server 2005中运行CLR
- 如何在SQL Server中使用CLR调用.NET方法
- [翻译]在SQL Server中使用CLR调用.NET方法
- [翻译]在SQL Server中使用CLR调用.NET方法
- 在SQL Server中使用CLR调用.net的dll
- 在SQL Server 2005 中使用.net程序集的注意(CLR存储过程篇)
- SQL Server 2005中的CLR
- sql server 2005中对CLR的允许设置
- SQL Server 2005中创建CLR存储过程
- sql server 2005中对CLR的允许设置
- 在虚拟环境中运行SQL Server
- 在SQL 2005中使用CLR函數實現字苻串排序
- 在SQL Server 2005 中是如何知道一条SQL 语句运行多长时间、CPU 运行率
- SQL Server CLR 极速入门,启用、设计、部署、运行
- SQL Server CLR 极速入门,启用、设计、部署、运行
- SQL Server CLR 极速入门,启用、设计、部署、运行
- [翻译]在SQL Server中使用CLR调用.NET方法(转)
- 在SQL Server中使用CLR调用.NET类库中的方法
- 设置默认浏览器L设置默认浏览器L
- Hibernate HQL(转)
- linux下挂载硬盘光驱和U盘
- 关于在ATL中自定义消息
- 轻松玩转MSN 8.5手写功能
- 在SQL Server 2005中运行CLR
- 打印DataGrid的指定的列和行
- 在php中输出html代码
- 在你的游戏中应用LUA(ZT)(转载)
- famous course
- php的post数据获取说明
- 如何成为一个合格的中层领导?
- 分析Linux和Windows动态库(转)
- Rich Client