MSSQLSERVER接入c# clr程序集的使用方法

前言

MSSQLSERVER提供程序集,无疑可以让编程人员更加便捷的操作数据库数据,比如c#写的函数,可以在数据库当作sql的函数使用,你想想他对不熟悉数据库的程序员来说是有多么的嗨。这么好的机制,大家当然不能错过,但是对于数据库变更迁移,可能会存在障碍与不便。所以建议大家在使用sqlsesrver clr程序集的时候也要做个权衡,以免给数据库以后的扩张带来不便。建议大家单次数据,数据过滤,的时候使用sqlserver clr程序集。长期依赖的话,还是另外选择解决方案。

MSSQLSERVER接入c#clr程序集,使c#函数变sql函数

模拟场景:

1、数据库表数据如下

2、问题描述:AreaPoints字段的Json数据格式在c#的第三方json数据解析中是没有问题的。但是他是由多端口调用数据,调用的程序可能是java或者其它语言,那么这种不规范的Json数据格式就不能被解析,这样一来就会存在数据错误。

3、解决方案:这里我就不扯淡啦,方案一定是很多中,今天我切入主体,使用c#的类方法,使不规范的即送数据格式转换成统一规范的Json数据格式。

4、秀具体操作如下。

MSSQLSERVER接入c#clr程序集,具体操作步骤,跟着做

1、创建c#函数。解决方案下添加--->新建项目

2、添加-->新建项---SQL Server ---SQL CLR C#------SQL CLR C#用户定义的函数

3、创建c#函数方法,不规则json转规范的json格式

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    //静态方法
    public static SqlString ToJson1(SqlString str)
    {
        try
        {
            string json = str.ToString();
            //双引号不变
            if (json.Contains("\""))
            {
                return json;
            }
            //单引号换双引号
            else if (json.Contains("‘"))
            {
                return json.Replace("‘", "\"");
            }
            //没引号的加双引号
            else if (json.Contains("lng:"))
            {
                json = json.Replace("lat", "\"lat\"").Replace(":", ":\"").Replace(",lng", "\",\"lng\"").Replace("}", "\"}");
                return json;
            }
            else
            {
                return json;
            }
        }
        catch
        {
            return str;
        }
    }
}

SQLSERVER添加Sql c# clr的2种方式展示,1、程序发布。

1、查看自己建立的c# clr 程序的属性,选中项目设置,确定目标平台与自己所要生成到的数据版本一直,不要一边是sqlserver2008一遍是sqlserver2012,这样是发布不成功的。还有选择SQLCLR,目标框架要在4.0一下,我选用的是3.5.

2、开启数据库服务器配置选项clr enabled

---开启所有服务器配置选项
EXEC sp_configure N‘show advanced options‘, N‘1‘
RECONFIGURE WITH OVERRIDE
--开启clr enabled 选项
EXEC sp_configure N‘clr enabled‘, N‘1‘
RECONFIGURE WITH OVERRIDE
--关闭所有服务器配置选项
EXEC sp_configure N‘show advanced options‘, N‘0‘
RECONFIGURE WITH OVERRIDE
--如果存在权限问题,执行下面一段脚本

alter database [master] set TRUSTWORTHY on

EXEC sp_changedbowner ‘sa‘

3、发布 sql c# clr 程序集,选择要发布的服务器,与要发布到哪个数据库。确定。

4.配置发布成功

SQLSERVER添加Sql c# clr的2中方式展示,2、手动在数据库添加程序集。

1、找到自己写的sql c# clr 程序集下生成的bin文件夹下的dll文件

2、同样执行上面的脚本,开启数据库服务器配置选项clr enabled,还有给sa付权限的脚本。

3、打开数据库下的可编程性,程序集,新建程序集

4、执行下面注册函数的脚本

create function dbo.ToJson1(@patten [nvarchar](4000))
RETURNS nvarchar(4000)
AS
---sql c# clr 程序集文件名.类名.方法名
EXTERNAL NAME BgSqlFun.UserDefinedFunctions.ToJson1

sql c# clr 自定义函数的使用

上面2种添加方式,任意一种添加都行。

declare @points varchar(4000);
select @points=AreaPoints from Mp_AreaPositionDetails where id=672
select dbo.ToJson1(@points)

就这样做啦一个简单的示例,希望能给一些选手,提供到帮助。thanks。

时间: 2024-10-30 01:51:22

MSSQLSERVER接入c# clr程序集的使用方法的相关文章

MSSQLSERVER添加c# clr程序集的使用方法

前言 MSSQLSERVER提供程序集,无疑可以让编程人员更加便捷的操作数据库数据,比如c#写的函数,可以在数据库当作sql的函数使用,你想想他对不熟悉数据库的程序员来说是有多么的嗨.这么好的机制,大家当然不能错过,但是对于数据库变更迁移,可能会存在障碍与不便.所以建议大家在使用sqlsesrver clr程序集的时候也要做个权衡,以免给数据库以后的扩张带来不便.建议大家单次数据,数据过滤,的时候使用sqlserver clr程序集.长期依赖的话,还是另外选择解决方案. MSSQLSERVER接

PCB MS SQL 标量函数(CLR) 实现转Json方法

一.准备需转为json的数据 在数据库中执行一段SQL返回的数据 需转换后的JSON字符串的效果 [{"TechName":"开料","ItemName":"综合利用率是否为最高","ItemPara":"/"},{"TechName":"开料","ItemName":"综合利用率","ItemPa

C#反射调用程序集类中方法

建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> /// public static int Add(int x, int y) { r

MS-SQLSERVER中的MSDTC不可用解决方法

今天在本地机直接在触发器里更新还有一台服务器数据时出现: MSDTC不可用  解决的方法:  在windows控制面版-->管理工具-->服务-->Distributed   Transaction   Coordinator-->属性-->启动 1.A.不用事务,关用SELECT   语句.能否够分布式查询?     B.LINKSERVER   在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)  C.DBCC   TRACEON   (3604,   730

CLR类型设计之方法与构造器

C#语言中最常用到的就是方法的语法,如果在控制台应用程序中,一定要有一个Main()方法作为程序入口,本文讨论的不是方法实现也不是为什么要写方法,而是来讨论下如何构造器和扩展方法. 无论学习那门语言都要学习函数体,C#,JAVA,PHP,都会涉及到函数体,而C#的函数体成员并不少,方法和构造器就是函数体成员之一,函数体成员还包括但不限于:方法,属性,构造器,终结器,运算符及索引器. 方法就是某个类相关的函数,也可以返回简单的基元类型或者什么也不反回,方法可以定义其公开性,如果使用static修饰

Windows Store 应用中获取程序集版本号的方法

本文为个人博客备份文章,原文地址: http://validvoid.net/windows-store-app-get-assembly-version/ WinRT 中对反射做了很多限制,假设 Windows Store 应用引用了一个程序集 MyApp.Utils,其中有一个类叫做 MyUtils,可以使用以下方法获得程序集 MyApp.Utils的版本号和文件版本号. 获得程序集版本号 方法一 using System.Reflection; public static string G

接入Erlang控制台的几种方法

在window中调试的时候我们可以通过启动多个cmd窗口运行Erlang节点,在生产环境中我们需要Erlang服务在Centos服务器上后台运行;这就需要在启动的时候添加启动参数detached来脱离终端:      -detached Starts the Erlang runtime system detached from the system console. Useful for running daemons and backgrounds processes. Implies -n

CLR如何调用虚方法、属性和事件

方法代表在类型或类型的实例上执行某些操作的代码.在类型上执行操作,称为静态方法:在类型的实例上执行操作,称为非静态方法.任何方法都有一个名称.一个签名和一个返回值(可以是void). CLR允许一个类型定义多个同名方法,只要每个方法都有一组不同的参数或者一个不同的返回值.所以,完全可以定义两个同名.同参数的方法,只要两者的返回类型不同.但是,除了IL汇编语言,我没有发现任何一个利用了这个“特点”的语言.大多数语言,在判断方法的唯一性是,除了方法名之外,都只以参数为依据,方法的返回类型会被忽略.

小米智能家居接入智能家居平台homeassistant的方法

[原文] 在安装和设置完homeassistant之后,我们终于来到激动人心的一步--把智能家居产品接入homeassistant了.把智能家居产品接入homeassistant智能家居平台之后,就可以实现用亚马逊echo智能音箱或叮咚智能音箱语音控制智能家居产品:也可以实现打破品牌壁垒,让不同的品牌的智能家居产品自动化联动.比如把小米智能家居产品和broadlink博联智能家居产品接入homeassistant,就可以让两个撕B品牌的智能家居产品联手友好合作了.今天我们先来接入的智能家居产品,