sqlserver执行c#函数

1,创建c# dll文件

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace DecryptClr
{
    public class DecryptData
    {
        #region ========解密========

        /// <summary>
        ///     解密
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string DecryptText(string text)
        {
            return text.Trim() == "" ? "" : Decrypt(text, "wanmeishijie");
        }

        /// <summary>
        ///     解密数据
        /// </summary>
        /// <param name="text"></param>
        /// <param name="sKey"></param>
        /// <returns></returns>
        public static string Decrypt(string text, string sKey)
        {
            text = text.Trim();
            sKey = sKey.Trim();
            var des = new DESCryptoServiceProvider();
            var len = text.Length / 2;
            var inputByteArray = new byte[len];
            int x;
            for (x = 0; x < len; x++)
            {
                var i = Convert.ToInt32(text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = Encoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8));
            des.IV = Encoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8));
            var ms = new MemoryStream();
            var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }

        // ReSharper disable once InconsistentNaming
        public static string MD5(string str)
        {
            //微软md5方法参考return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
            var b = Encoding.Default.GetBytes(str);
            b = new MD5CryptoServiceProvider().ComputeHash(b);
            return b.Aggregate("", (current, t) => current + t.ToString("X").PadLeft(2, '0'));
        }

        #endregion ========解密========
    }
}

 2,开启数据库 CLR 支持,并且指定某个数据库支持 unsafe 模式。 

EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO
 
ALTER DATABASE MotoSys_KM2 SET TRUSTWORTHY ON;
GO

3,用户授权

ALTER AUTHORIZATION on  DATABASe::MotoSys_KM2 to sa
GO

4,加载程序集

--DROP ASSEMBLY Decrypt  删除程序集
CREATE ASSEMBLY DecryptClr
FROM 'D:\DB\Decrypt.dll'
WITH PERMISSION_SET = UNSAFE;
GO

5,创建函数

CREATE FUNCTION dbo.Decrypt
(
    @text AS nvarchar(255)
)
RETURNS nvarchar(255)
AS
EXTERNAL NAME DecryptClr.[DecryptClr.DecryptData].DecryptText;
GO

6,调用函数

select top 10 dbo.Decrypt(Kscj) as kscj from Exam_Person_Record order by AutoId desc;

猜你喜欢

转载自blog.csdn.net/dwm88888888/article/details/129195225
今日推荐