在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 = ;
if (n>=)
{
for (int i = ; i <= n; i++)
{
sum = sum + i;
}
return sum;
}
else
{
return ;
}
}
//将字符串转换成大写
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' , '';  --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

SQLSERVER调用DLL程序的更多相关文章

  1. C/C++:Windows编程—调用DLL程序的2种方法(转载)

    文章为转载,原文出处https://blog.csdn.net/qq_29542611/article/details/86618902 前言先简单介绍下DLL.DLL:Dynamic Link Li ...

  2. DLL程序的创建步骤和測试程序

    首先,创建DLL程序 然后,加入一个导出类 比如: //Test.h #pragma once class AFX_EXT_CLASS Test { public:  Test(void);  ~Te ...

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

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

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

    摘   要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在 ...

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

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  6. 浅谈C++调用C#的DLL程序方法

    把C#编译成DLL或者Axtive控件,再由C调用!比如使用C++调用C#的DLL. SwfDotNet是.net下输出flash的类库.SwfDotNet是C#编写的,作者的C#水平,真是令我佩服. ...

  7. 当程序调用dll时获取dll路径,DLL中获取自身的句柄

    当程序调用dll时,获取dll路径的方法: HMODULE hMod = GetModuleHandle(_T("axload.dll")); if (hMod != NULL) ...

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

    原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...

  9. Window系统命令行调用控制面板程序

    Window系统命令行调用控制面板程序 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name M ...

随机推荐

  1. linux中nginx重定向方法总结

    linux中nginx 301重定向跳转方法总结 第一种情况:访问aaaaaaa站定向到bbbbbbbbbbb站 复制代码代码如下: server { server_naaaaaaame www.aa ...

  2. bzoj 1297 矩阵乘法变形

    首先对于矩阵乘法的功能有很多,记得有篇论文叫矩阵乘法在信息学竞赛中的应用,里面详细介绍了矩阵的 作用 其中一个就是求图的固定时间方案数,也就是给定一张图,每两个点之间由一条边长为1的边相连, 求任意两 ...

  3. gdb 调试 ncurses 全过程:

    转载地址: http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU ...

  4. Linux驱动 读写文件【转】

    转自:http://blog.csdn.net/h_armony/article/details/7546624 在VFS的支持下,用户态进程读写任何类型的文件系统都可以使用read和write着两个 ...

  5. 简单粗暴的webapp语言国际化

    不同语言以json格式存放不同文件 { "information": "个人资料", "fuckworld":"你好世界" ...

  6. springboot整合jsp模板

    springboot整合jsp模板 在使用springboot框架里使用jsp的时候,页面模板使用jsp在pom.xnl中需要引入相关的依赖,否则在controller中无法返回到指定页面 〇.搭建s ...

  7. 解决:org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform

    centos7.3 启动tomcat 出现错误: 八月 08, 2017 4:58:47 下午 org.apache.catalina.core.StandardEngine startInterna ...

  8. [ 总结 ] Linux kickstart 无人值守安装系统构建过程

    环境:Vmare + Linux虚拟机 注意:网卡桥接

  9. import module与from module import * 两种模块导入有何区别

    #原创,转载请留言联系 区别1 import module 引用共享变量时,要使用module.变量名. 而from module import * 直接使用变量名即可 区别2(有点绕) import ...

  10. DELPHI 参数前缀的使用

    传值参数传值参数可在过程内部修改,但过程返回时该修改不会反映出来.不加任何前缀,就表示该参数为传值参数.Procedure Foo( I : Integer );I 的值被传递到Foo 过程.当Foo ...