SQL Server 2005 调用vs.net 托管代码实例

原创 2006年05月19日 15:58:00

在 SQL Server 2005 中,可以在 SQL Server 实例中使用以下方法创建数据库对象:基于 Microsoft .NET Framework 公共语言运行时 (CLR) 中创建的程序集使用编程方法创建。可以充分利用公共语言运行时所提供的丰富的编程模式的数据库对象包括聚合函数、函数、存储过程、触发器以及类型。

在 SQL Server 中创建 CLR 函数分为下列几个步骤:
使用 .NET Framework 支持的语言将函数定义为类的静态方法。然后,使用适当的语言编译器编译该类,在 .NET Framework 中生成程序集。
使用 CREATE ASSEMBLY 语句在 SQL Server 中注册程序集。
通过使用 CREATE FUNCTION 语句创建引用注册程序集的函数。


注意: 
默认情况下,关闭 SQL Server 执行 CLR 代码的功能。您可以创建、更改和删除引用托管代码模块的数据库对象,但是除非通过使用 sp_configure (Transact-SQL) 启用了 clr enabled 选项,否则这些引用将不会在 SQL Server 中执行。


访问外部资源

可以使用 CLR 函数访问外部资源,例如文件、网络资源、Web 服务及其他数据库(包括 SQL Server 远程实例)。这可以通过使用 .NET Framework 中的各种类(例如 System.IO、System.WebServices 及 System.Sql 等)来实现。至少应将包含此类函数的程序集配置为设置了 EXTERNAL_ACCESS 权限,才能实现此目的。可以使用 SQL 客户端托管提供程序访问 SQL Server 远程实例。但在 CLR 函数中不支持与发起服务器的环回连接。

----实例:

--1: 创建Vs.net 2005 建C#项目文件
--创建新类(EventLog.cs):
--代码:
using System;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
using System.Collections;
using System.Data.SqlTypes;
using System.Diagnostics;

public class TabularEventLog
{
    [SqlFunction(FillRowMethodName = "FillRow")]
    public static IEnumerable InitMethod(String logname)
    {
        return new EventLog(logname, Environment.MachineName).Entries;
    }

    public static void FillRow(Object obj, out SqlDateTime timeWritten, out SqlChars message, out SqlChars category, out long instanceId)
    {
        EventLogEntry eventLogEntry = (EventLogEntry)obj;
        timeWritten = new SqlDateTime(eventLogEntry.TimeWritten);
        message = new SqlChars(eventLogEntry.Message);
        category = new SqlChars(eventLogEntry.Category);
        instanceId = eventLogEntry.InstanceId;
    }
}

--2: 创建创建包含类元数据和托管代码的托管应用程序模块,将其作为 SQL Server 实例中的对象。
CREATE ASSEMBLY tvfEventLog
FROM 'D:/IISWebRoot/SQLCLR/SQLFunction/SQLFunction/bin/Debug/SQLFunction.dll'
WITH  PERMISSION_SET = UNSAFE
GO
--3: 创建 CLR 函数。
CREATE FUNCTION ReadEventLog(@logname nvarchar(100))
RETURNS TABLE
(logTime datetime,Message nvarchar(4000),Category nvarchar(4000),InstanceId bigint)
AS
EXTERNAL NAME tvfEventLog.TabularEventLog.InitMethod
GO
--4: 测试
SELECT top 10 *
FROM dbo.ReadEventLog(N'Security') as T
go
--结果(自己查看)

--删除环境
Drop function ReadEventLog
Drop ASSEMBLY tvfEventLog

 

--注意事项(创建测试失败的情况):
1: 启用数据库CLR支持
 --***********************************************
 EXEC sp_configure 'show advanced options','1';
 go
 reconfigure;
 go
 EXEC sp_configure 'clr enabled','1'
 go
 --***********************************************
2: 更改数据库信任模式(为正确添加到程序集)
TRUSTWORTHY { ON | OFF }
ON
使用模拟上下文的数据库模块(例如,用户定义函数或存储过程)可以访问数据库以外的资源。

OFF
模拟上下文中的数据库模块不能访问数据库以外的资源。
 --***********************************************
 Alter Database 数据库名称
 SET TRUSTWORTHY ON
 --***********************************************

安装和配置VS.NET 2003和SQL SERVER 2005

1、首先安装IIS。 工具/原料 环境:windows xp 步骤/方法 1 先在百度找到IIS 6.0,然后下载下来,当然其它的版本也可以,我这个是为了凑合系统。  ...

VS.NET2005操作SqlCE3.0数据库的例子

最近在做Pocket PC的程序,用到了Sql CE数据库,下面我把我的代码贴下来,供初学者使用:界面如下:代码如下:using System;using System.Collections.Gen...

asp.net调用sql server存储过程的实例

存储过程,想必有过面试经验的挨踢男都被问到过,刚找工作的时候老被问到存储过程,学的时候我也是一知半解,回答自然好不到哪去。不知不觉已经敲了一年半的代码了,一直以为自己是个菜鸟,今天突然在一个群看到有个...

vs.net 2005, 没有找到MSVCR80D.dll的完美解决方案

问题描述:大部分的vs.net 2005的用户在新建“win32项目-windows应用程序”的时候,新建的工程都通不过去,出现如下提示: Solution to “MSVCR80D.dll not...
  • xcntime
  • xcntime
  • 2012年08月12日 18:50
  • 341

asp.net 连接sql server 2005 数据库的设置

在Visual Studio 2005连接SQL Server 2000中,我们可能会知道,连接字符串会比较简单,一般远程连接的时候,只需要在Web.config文件配置如下: Time...

.net自带 SQL Server 2005 Express使用

SQL Server 2005 Express(以下简称SQLServer)是VS2005的套件之一,发行已经有段时间了。它可以单独下载安装,也可以在安装VS2005的时候安装。我是在安装VC#200...

asp.net SQL Server 存储过程分页及代码调用

1、创建存储过程,如CREATE PROC P_viewPage    @TableName VARCHAR(200),     --表名    @FieldList VARCHAR(2000),  ...

SQL Server 2005安装时需要64位的ASP.Net才能安装

SQL Server 2005安装时提示:ASP.Net版本注册要求 32位的ASP.Net已注册,需要64位的ASP.Net才能安装Microsoft Reporting services 2...
  • sxycgxj
  • sxycgxj
  • 2014年11月07日 10:30
  • 1043
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 2005 调用vs.net 托管代码实例
举报原因:
原因补充:

(最多只允许输入30个字)