用C#编写DLL给MS SQL SERVER 2005用

[本人的CSDN博文不介意被转载,但请注明出处]

 

SQL内置了很多函数,但总不可能面面俱到。这里我们以Base64算法编码字符串为例,解释如何用C#编写的类库DLL扩充SQL功能。

 

建立一个普通的类库项目,编写代码没有任何不同,但要注意:

1 记得 using Microsoft.SqlServer.Server;
2 函数必须是public的静态方法;
3 想发布给SQLSERVER的函数前加一句[SqlFunction(DataAccess=DataAccessKind.None)]
4 一定要记下[命名空间].[命名空间.类名].[函数名]。
5 注意SQL类型与C#类型的对应关系。C#的string对应的是nvarchar/nchar。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Microsoft.SqlServer.Server;
  5. namespace KI.SQL
  6. {
  7.     public class KiBase64
  8.     {
  9.         public KiBase64()
  10.         {
  11.         }
  12.         [SqlFunction(DataAccess = DataAccessKind.None)]
  13.         /// <summary>
  14.         /// Base64编码
  15.         /// </summary>
  16.         /// <param name="encode"></param>
  17.         /// <returns></returns>
  18.         public static string Encode(string encode)
  19.         {
  20.             string rtn = "";
  21.             try
  22.             {
  23.                 byte[] bytes = Encoding.GetEncoding("gb2312").GetBytes(encode);
  24.                 rtn = Convert.ToBase64String(bytes);
  25.             }
  26.             catch
  27.             {
  28.                 rtn = "";
  29.             }
  30.             return rtn;
  31.         }
  32.         [SqlFunction(DataAccess = DataAccessKind.None)]
  33.         /// <summary>
  34.         /// Base64解码
  35.         /// </summary>
  36.         /// <param name="code"></param>
  37.         /// <returns></returns>
  38.         public static string Decode(string code)
  39.         {
  40.             string decode = "";
  41.             try
  42.             {
  43.                 byte[] bytes = Convert.FromBase64String(code);
  44.                 decode = Encoding.GetEncoding("gb2312").GetString(bytes);
  45.             }
  46.             catch
  47.             {
  48.                 decode = "";
  49.             }
  50.             return decode;
  51.         }
  52.     }
  53. }

调试通过后把DLL复制到服务器的某个目录下,比如x:/Ki1381下。


现在打开SQL2005的管理工作台,在指定的数据库中注册这个程序集:

create assembly [KI.SQL] -- 我项目的命名空间是KI.SQL
FROM 'x:/Ki1381/ki.sql.dll'

 

然后编写SQL函数:
CREATE FUNCTION EncodeBase64(@str nvarchar(100))
RETURNS nvarchar(800)
AS
External name [KI.SQL].[KI.SQL.KiBase64].Encode

 

同样可以把解码函数也做出来。

 

创建函数也许会报错,可以尝试启用一下clr enabled选项:
EXEC sp_configure 'clr enabled',1
go
RECONFIGURE
go

 

这样,SQL里就可以直接调用了。比如:select dbo.EncodeBase64('汉字&Abc') as Base64Chars

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ki1381

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值