在SQL Server中调用 .NET 类库的方法要分为下面几步来实现:

  1. 在.NET中新建一个类库项目,并在这个项目中添加一个类文件,并把要被SQL Server调用的方法定义为公有的,静态的方法。
  2. 把这个项目编译为一个DLL。
  3. 在SQL Server中注册这个DLL。
  4. 通过使用SQL Server的函数来访问指定的.NET方法。

1: 在类库中编写方法,必须是静态公有的

public   class  CLRFunctions
{
public static string HelloWorld( string Name)
{
return ( " Hello " + Name);
}
}

2: 启用CLR功能

默认情况下,SQL Server中的CLR是关闭的,所以我们需要执行如下命令打开CLR

exec  sp_configure  ' clr enabled ' , 1
reconfigure [with override]
go

如果上面的命令在执行过程中出现“不支持对系统目录进行即席更新 ”的错误时,可以把上面方括号里面的内容加上。

3:注册DLL

为了调用我们写的那个方法,需要在SQL Server中注册我们刚刚编译好的那个DLL。 我们可以在数据库中使用如下命令来注册DLL(路径为你的DLL文件的路径)

CREATE  ASSEMBLY asmHelloWorld  FROM   ' C:/SQLDLL.dll '    

如果要删除注册的DLL,可以使用下面的方法:

DROP ASSEMBLY asmHelloWorld 

4:在SQL Server中调用我们的.NET方法

为了调用.NET方法,我们可以写一个SQL Server自定义函数,并在其内使用“EXTERNAL NAME”来通知SQL Server使用CLR功能。 代码如下:

CREATE   FUNCTION  dbo.clrHelloWorld
(
@name as nvarchar ( 200 )
)
RETURNS nvarchar ( 200 )
AS EXTERNAL NAME asmHelloWorld. [ SQLDLL .CLRFunctions ] .HelloWorld

上面的自定义函数做了两项工作。首先是声明了一个nvarchar参数,它等同于.NET里的string类型(如果将其设置为varchar并且后面使用了“EXTERNAL NAME”的话就会报错)。然后使用“EXTERNAL NAME”来调用.NET方法。 语法如下:

 程序集注册名.[程序集名.类名].方法名

现在我们就可以通过如下语句调用.NET方法了:

SELECT  dbo.clrHelloWorld( ' Mark ' )

原文链接

在SQL Server中使用CLR调用.NET类库中的方法 (转载)的更多相关文章

  1. SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

    1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...

  2. sql server 2008 windows验证改混合登陆中SqlServer身份验证用户名密码

    安装过程中,SQL Server 数据库引擎设置为 Windows 身份验证模式或 SQL Server 和 Windows 身份验证模式.本主题介绍如何在安装后更改安全模式. 如果在安装过程中选择“ ...

  3. SQL Server 2008 定时作业的制定(SQL2005参考此方法) 转

    --  Author : htl258(Tony)--  Date   : 2010-04-29 19:07:45--  Version:Microsoft SQL Server 2008 (RTM) ...

  4. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  5. 在C#中我们能调用一个类的私有方法吗

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中我们能调用一个类的私有方法吗.

  6. 在SQL Server中使用CLR调用.NET方法

    介绍    我们一起来做个示例,在.NET中新建一个类,并在这个类里新建一个方法,然后在SQL Server中调用这个方法.按照微软所述,通过宿主 Microsoft .NET Framework 2 ...

  7. C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try

    C#程序调用Sql Server存储过程,存储过程中报错情况,返回值... 0.SQL存储过程 USE [Opos] GO /****** Object: StoredProcedure [dbo]. ...

  8. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  9. SQL SERVER 2005允许自定义聚合函数-表中字符串分组连接

    不多说了,说明后面是完整的代码,用来将字符串型的字段的各行的值拼成一个大字符串,也就是通常所说的Concat 例如有如下表dict  ID  NAME  CATEGORY  1 RED  COLOR  ...

随机推荐

  1. js字符串替换

    <script language="javascript">var r= "1\n2\n3\n";//将字母\n替换成分号alert(r.repla ...

  2. 腾讯云点播视频存储(Web端视频上传)

    官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...

  3. vue框架之自定义组件中使用v-model

    通常 vue在html常见表单空间支持v-model双向绑定例如 <input v-model="message" placeholder="edit me&quo ...

  4. 世界上最短的bash脚本

    世界上最短的bash脚本长这样: #!/bin/bash 为啥呢?见下图: 推荐一篇文章,讲解为啥shell脚本开头总是"#!/bin/bash".文风太清奇,不好翻译,看原文吧: ...

  5. 关于oracle的缓冲区机制与HDFS中的edit logs的某些关联性的思考

    可能大家会问,oracle和HDFS属于不同场景的存储系统,它们之间为什么会有联系呢?确实,从技术本身来看,他们确实无关联,但利用“整体学习”的思想,跳出技术本身,可以发现Oracle的缓冲区和HDF ...

  6. 数据序列化导读(3)[JSON v.s. YAML]

    前面两节介绍了JSON和YAML,本文则对下面的文章做一个中英文对照翻译. Comparison between JSON and YAML for data serialization用于数据序列化 ...

  7. java 写法推荐

    1. for循环 for (int i = 0; i < list.size(); i++) { int item = list.get(i); System.out.println(" ...

  8. 小程序获取view元素的高度

    页面wxml <!--page/index/index.wxml--> <view id='demo'> <text>哈哈哈哈哈</text> < ...

  9. 解决:git使用git push 命令跳出remote: Permission to A denied to B的问题

    开始git上传项目,不料,在git push这一步骤发生了错误? remote: Permission to qwe2193066947/firstRepository.git denied to m ...

  10. 百度前端技术学院task34源码——会指令的小块2

    任务描述 增加新的指令如下: TRA LEF:向屏幕的左侧移动一格,方向不变 TRA TOP:向屏幕的上面移动一格,方向不变 TRA RIG:向屏幕的右侧移动一格,方向不变 TRA BOT:向屏幕的下 ...