SQLSERVER调用DLL程序

在SQL Server中调用dll分为两个步骤

1.创建一个dll文件(dll文件分成3种类型,讲其中一种)

2.把dll文件放进SQL Server的程序集中。然后定义一个Function,就可以通过该Function来引用dll中的函数。

1创建一个dll文件

  1.1点击“文件”->“新建”->“项目”->类库,把命名空间改成TestDLL,添加如下代码

(框架必须改为.NET3.5及3.5以下,因为SQL Server 2008只是支持.NET 3.5及一下,.NET 4.0是2010年发布的,不支持也很正常,C#方法必须是静态方法,因为静态函数不用实例化类就可以调用)

创建dll程序(求和、小写字母转换成大写字母)

using System;
using System.Collections.Generic;
using System.Text;

namespace TestDLL
{
    public class Class1
    {
        //求0到n的和当n小于0时返回0
        //方法必须为静态方法,因为静态函数不用实例化类就可以调用
        public static int Calc(int n)
        {
            int sum;
            sum = 0;
            if (n>=0)
            {
                for (int i = 0; i <= n; i++)
                {
                    sum = sum + i;
                }
                return sum;
            }
            else
            {
                return 0;
            }
        }
        //将字符串转换成大写
        public static string Todaxie(string s)
        {
            return s.ToUpper();
        }
    }
}

1.2右击“项目”,点击”生成“或者直接按F6

  1.3右击“项目”,点击“在文件资源管理系统中打开文件夹”,点击bin->debug,然后就会看到一个TestDLL.dll文件。

2在SQL中引用dll文件

  2.1允许SQL Server允许运行用户程序集

在SQL Server中运行如下代码:

EXEC sp_configure ‘clr enabled‘ , ‘1‘;  --0代表不允许,1代表运行
RECONFIGURE; 

其中TestDll是你在数据库中为这个程序集起的名字。

2.3创建一个Function,使用该dll文件

使用如下SQL语句

--转换成大写字母
create FUNCTION [dbo].[ToUpper](@InputString [nvarchar](500))
RETURNS [nvarchar](200)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [TestDLL].[TestDLL.Class1].[Todaxie]
GO
--求和函数
CREATE FUNCTION [dbo].[Calc](@n int)  --该函数名字
RETURNS int  --返回类型
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [TestDLL].[TestDLL.Class1].[Calc]  --调用c#程序集
GO

注意一下的那几个单词。

TestDLL是指你程序集中dll的名称。

TestDLL是指dll文件中那个类的命名空间

Class1是指dll文件中那个类的类名

Todaxie是指dll文件中那个被调用的静态方法

最后,便可以这样来调用该函数

print dbo.ToUpper(‘abc‘)   --输出的结果为ABC 
SELECT dbo.Calc(3)       --输出的结果为6
时间: 2024-08-13 06:52:16

SQLSERVER调用DLL程序的相关文章

DLL程序的创建步骤和测试程序

首先,创建DLL程序 然后,添加一个导出类 例如: //Test.h #pragma once class AFX_EXT_CLASS Test { public: Test(void); ~Test(void); void Show(); }; //Test.cpp void Test::Show() { AfxMessageBox(_T("sdsdsa")); } 最后,连接,编译,生成.dll文件和.lib文件 测试程序: 创建一个Dialog对话框应用程序 首先,把生成的.dl

C#程序实现动态调用DLL的研究(转)

摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供了一种解决方案.这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也有相似的VB程序,但在某一技术论坛上提起这种设计方法时,有网友提出:“这种方法好是好,但就是启动

C#程序实现动态调用DLL的研究

原文:C#程序实现动态调用DLL的研究 摘  要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决"DLL Hell"提供了一种解决方案.这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也有相似的VB程序,但在某一技术论坛

C#程序实现动态调用DLL的研究[转]

摘   要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“ DLL Hell ”提供了一种解决方案.这是一个很好的设计思想,而且该作者也用 C++ 实现了,在 Internet 上也有相似的 VB 程序,但在某一技术论坛上提起这种设计方法时

了解GAC:从“找不到Microsoft.SqlServer.SqlClrProvider.dll”的问题开始

了解GAC:从"找不到Microsoft.SqlServer.SqlClrProvider.dll"的问题开始                             老帅    先上图,看真相,如下: 一.问题描述 我使用Microsoft.SqlServer.Smo开发了一个数据库管理工具,根据定制的需求,完成对SQLServer的管理.部署到客户机以后,就提示上述错误.而这个文件在我本机上使用全盘搜索,无论如何也搜索不到. 二.追根溯源    经过研究,发现这个文件是SQLSer

SQL点滴15—在SQL Server 2008中调用C#程序

原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可以在SQL Server 2008中扩展C#程序来完成循环等过程式的查询,或者其他SQL不便实现的功能.这个随笔中将介绍在SQL Server中扩展C#程序实现正则表达式的替换功能. 新建一个类库程序命名为Regex,打开Visual Studio 2008,点击File,点击New,点击Proje

DLL程序组件Microsoft Reporting Services Barcode Custom Report Item

Microsoft Reporting Services Barcode Custom Report Item(CRI)是一个易于安装和使用的DLL程序组件,其作为一个集成的组件用于在Microsoft Reporting Services报表中创建条形码,而不需要使用条形码字体.提供的所有的Designer和Render DLLs都是用C#语言编写的100%托管代码,且具有数字签名和带有时间戳的Verisign软件认证码证书 具体功能: 用一个Custom Report Item(CRI)添加

php调用dll经验小结

最近做一个网站,需要频繁使用远程数据,数据接口已经做好.在做转换的时候遇到了性能上的问题:开始打算用php来实现转换,苦苦查了数天,都没有找到直接操作字节的方法.虽然可以使用 pack() 方法将各个数据压入结构中,但是在解压的时候却不能通过 unpack() 简单的解出来,需要通过 //php code for( $i = 0; $i < $length; $i+=2 ){ $tempstr = $tempstr.chr( hexdec(substr($array["data"

delphi编写与调用DLL(delphi7下测试通过)

http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html 1 delphi编写DLL 2 下面在delphi中编写一个简单的dll,在该dll中只有一个max函数,返回2个数中的大数(Delphi 5.0) 3 1.New->DLL;取名为DLL_0001,编写代码: 4 library dll_0001; 5 uses 6 SysUtils, 7 Classes; 8 {$R *.RES} 9 function max(x,y:integer):