参考:微软官网 https://msdn.microsoft.com/zh-cn/library/ms345106(es-es).aspx

1、新建项目 SQLDllTestUsingNew

  Class1类代码:

using System.Web;
namespace SQLDllTestUsingNew
{
public class Class1
{
public static string GetStr(string par1)
{
return par1 + "水印New";
}
}
}

2、类库项目进行签名,签名后编译【项目】:

3、启用CLR功能:默认情况下,Sql Server中的CLR是关闭的,

exec sp_configure 'clr enabled',1
reconfigure
go

4、

注册DLL:

为了调用我们写的那个方法,需要在SQL Server中注册我们刚刚编译好的那个DLL。在此之前,要知道在这个项目中如果要访问服务器之外的资源是要配置权限的。如果不配置,后面操作中会出现类似下面的错误。我找到的关于授权配置的内容:连接

创建登录名和密钥,如果程序集有变更,要删除密钥和登录名重新创建:

USE master; --此处必须是 master库
GO CREATE ASYMMETRIC KEY SQLCLRSyncKey FROM EXECUTABLE FILE = 'D:\SQLDllTestUsingNew.dll'
CREATE LOGIN SQLCLRSyncLogin FROM ASYMMETRIC KEY SQLCLRSyncKey
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRSyncLogin;
GRANT UNSAFE ASSEMBLY TO SQLCLRSyncLogin 

创建程序集,DLL变更后要删除重新创建代码如下:

DROP LOGIN SQLCLRSyncLogin
DROP ASYMMETRIC KEY SQLCLRSyncKey

5、创建程序集,DLL变更后要删除重新创建:

use TestDB
go create ASSEMBLY MySync
FROM 'D:\SQLDllTestUsingNew.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS; 如果提示错误:Msg 6522, Level 16, State 1, procedure InsertingRows,Line 0
A .NET Framework error occurred during execution of user defined routine or aggregate 'InsertingRows':
System.Security.SecurityException
改成:create ASSEMBLY MySync
FROM 'D:\SQLDllTestUsingNew.dll'
WITH PERMISSION_SET = UNSAFE;

6、创建一个函数用于调用这个DLL

CREATE FUNCTION dbo.fun_sync
(
@strSql nvarchar(max)
)
RETURNS nvarchar(max)
AS EXTERNAL NAME [MySync].[SQLDllTestUsingNew.Class1].[GetStr]

7、调用创建的函数。

select dbo.fun_sync('dsdfg')

结果: dsdfg水印New

SQL调用C# dll(第二中DLL,强名称密匙)的更多相关文章

  1. SQL调用C# dll(第一中DLL,没使用强名称密匙,默认是 safe)

    https://msdn.microsoft.com/zh-cn/library/ms345106(es-es).aspx 1.新建项目名称SQLDllTest,类代码如下,没有用Using引用其他类 ...

  2. Delphi程序调用C#.Net编译的DLL并打开窗体(详解)

    Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...

  3. 编译可供C#调用的C/C++动态链接库dll文件

    编译可供C#调用的C/C++动态链接库dll文件,C语言控制台应用程序,探索生成dll过程 由于项目需求,需要公司另一个团队提供相关算法支持,是用C语言编译好的dll库提供给我们进行调用. 但是拿到d ...

  4. 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

    from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...

  5. (转)C#调用非托管Win 32 DLL

    转载学习收藏,原文地址http://www.cnblogs.com/mywebname/articles/2291876.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使 ...

  6. AutoCAD.NET 不使用P/Invoke方式调用acad.exe或accore.dll中的接口(如acedCommand、acedPostCommand等)

    使用C#进行AutoCAD二次开发,有时候由于C#接口不够完善,或者低版本AutoCAD中的接口缺少,有些工作不能直接通过C#接口来实现,所以需要通过P/Invoke的方式调用AutoCAD的其他DL ...

  7. java调用C/C++写的dll(转)

    源:java调用C/C++写的dll Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C++写好的DLL ...

  8. Java之Jacob调用COM接口DLL-----------------------------------dm。dll

    用Java控制windows了,嗯,低层次按键模拟,可控制游戏,内存也不在话下. 一.环境介绍 1.myeclipse8.5 2.著名按键插件dm.dll  32bit.此插件实现COM接口,百度百科 ...

  9. Java调用C/C++实现的DLL动态库——JNI

    由于项目的需要,最近研究了java 调用DLL的方法,将如何调用的写于此,便于日后查阅: 采用的方法是JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让J ...

随机推荐

  1. http与https之间的区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  2. Linux性能优化 第三章 性能工具:系统内存

    3.1内存性能统计信息 3.1.1 内存子系统和性能 和CPU相比,内存的读写速度都大大落后于CPU.为了弥补这个差距,通常CPU会采用高速缓存的机制(高cache). 3.1.2 内存子系统(虚拟存 ...

  3. Android Activity传递数据使用getIntent()接收不到,揭秘Intent传递数据与Activity启动模式singleTask的关系。

    activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.. 如果要启动的activit ...

  4. 浅谈jmeter请求参数获取的方式

    一.传统的web端请求参数我们在浏览器url栏看到传递的参数是什么,比如百度: 1.我们假如百度有一个这样的地址: https://www.baidu.com/s?wd=jmeter&name ...

  5. linux中的IP地址的修改

    一,图形界面,setup 二,修改文件 1,修改主机名字 vi /etc/sysconfig/network NETWORKING=yes #HOSTNAME=localhost.localdomai ...

  6. Java swing 代码例子

    package com; import java.awt.Button; import java.awt.Container; import java.awt.event.ActionEvent; i ...

  7. 使用Fiddler获取手机app数据

    参考资料:https://www.jianshu.com/p/9e05a2522758 Fiddler下载地址   https://www.telerik.com/download/fiddler

  8. python数组和矩阵使用总结

    python数组和矩阵使用总结 1.数组和矩阵常见用法 Python使用NumPy包完成了对N-维数组的快速便捷操作.使用这个包,需要导入numpy. SciPy包以NumPy包为基础,大大的扩展了n ...

  9. nginx配置开机启动及配置sudo授权启动

    1.https://www.cnblogs.com/whatmiss/p/7091220.html        配置开机启动nginx 2.sudo授权其它用户启动 (1)root用户编辑 visu ...

  10. UEditor 在ie中报console未定义解决方案

    解决办法:                  1.注释掉该代码               2.或者加入如下代码即可,本人已经测试过,没有问题. window.console = window.con ...