SqlServer——调用C#CLR程序集方法

一、写C#方法

注意方法必须是静态的

using Microsoft.SqlServer.Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace AssemblySqlFunc
{
          
   
    public static class ConvertXMLToString
    {
          
   
        [SqlMethod]
        public static string ReturnValue(string xmlstr, string nodename, int x =-1)
        {
          
   
            string value = null;
            try
            {
          
   
                XmlDocument xx = new XmlDocument();
                xx.LoadXml(xmlstr);//加载xml
                XmlNodeList xxList = xx.GetElementsByTagName(nodename); //取得节点名为node的XmlNode集合

                if (x >= 0)
                {
          
   
                    int i = 1;
                    foreach (XmlNode xxNode in xxList)
                    {
          
   
                        string nodeText = xxNode.InnerText;

                        value = nodeText;
                        if (i == x)
                            return value;

                        i++;
                    }
                }
                else
                {
          
   
                    foreach (XmlNode xxNode in xxList)
                    {
          
   
                        string nodeText = xxNode.InnerText;

                        value = nodeText;
                        if (!string.IsNullOrEmpty(value))
                            return value;
                    }
                }

            }
            catch (Exception ex)
            {
          
   
                value = "GetValue Error!";
            }
            return value;
        }
    }
}

二、在sqlserver中引入程序集

三、利用程序集创建sqlserver方法

注意: 使用程序集时不用给程序集方法传入参数,该sqlserver函数的参数会自动传入程序集方法中。

CREATE FUNCTION [dbo].[GetXMLNodeValueFunc](@xmlStr [nvarchar](max), @nodename [nvarchar](1000), @seq [int])
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [AssemblySqlFunc].[AssemblySqlFunc.ConvertXMLToString].[ReturnValue]
GO

四、测试

成功拿到指定node节点的值。

五、更新CLR程序集

注意: 一定要把程序集放到权限低的文件夹下,否则会报5.拒绝访问的错误

ALTER ASSEMBLY AssemblySqlFunc FROM E:BackupAssemblySqlFunc.dll;
经验分享 程序员 微信小程序 职场和发展