特殊场景下,解决前后台都能调用C#公共代码,例如加解密、数据转换等,可以用到此办法加入解决方案,杜绝非理论派,以实际应用解决问题优先。
一、创建类库DLL,使用Visual Studio Professional 2019
第一次选择:使用 .NET Standard 2.1 ,生成DLL后,注册到sqlserver不成功
在 SQL 目录中找不到程序集 'netstandard, version=2.1.0.0, culture=neutral, publickeytoken=cc7b13ffcd2ddd51.'。 (.Net SqlClient Data Provider)
第二次选择:使用 .NET Standard 2.0 ,生成DLL后,注册到sqlserver不成功
第三次选择:使用 .NET Framework4.5 ,生成DLL后,注册到sqlserver成功
注意:
(1)方法必须是静态的
(2)返回值用string
二、更改数据库的一些配置,在ManageMent Studio中执行:
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO
ALTER DATABASE TEST SET TRUSTWORTHY ON;
GO
三、注册程序集
一定要把程序集放到权限低的文件夹下,否则会报5.拒绝访问的错误
(1)第一种办法:在指定数据库名——可编程性——程序集
(2)第二种办法:或者在后台执行语句
CREATE ASSEMBLY clr_CalcAge
FROM 'D:\PROG\CalcAge.dll'
WITH PERMISSION_SET = UNSAFE;
GO
四、新建function
虽然引入了,但如果不在SQLserver中创建,还不方便直接使用;
CREATE FUNCTION FunClrCalcAge(@birth NVARCHAR(100))
RETURNS nvarchar(200) AS
EXTERNAL NAME clr_CalcAge.[CalcAge.UserFunctions].FunCalcAge
注意: (1)C#中函数的入参,即创建函数的入参
(2)sqlserver 中的"nvarchar"对应c#中的“string"
五、正式使用
select dbo.FunClrCalcAge('1980-06-05')