zoukankan      html  css  js  c++  java
  • 在SQL Server中调用.NET程序集

    使用到这东西完全是个巧合和无奈之举。不小心在数据库中插入了一些HttpUtility.UrlEncodeUnicode之后的数据。数据库里的一些字段成了%uxxxx%uxxxx这样的结构。

    搜索了半天T-SQL UrlDecode的函数,发现都不支持上面这种Unicode的。自己对T-SQL又不熟悉,时间也很紧迫。

    解铃还须系铃人,想到在T-SQL里调用HttpUtility.UrlDecode应该会比较方便。查了一下,大概代码如下。这东西用完就忘,记下来备查吧。

    建立一个DLL,一个类,代码如下。

    public partial class SystemWeb 
        { 
            [SqlMethod] 
            public static SqlString UrlDecode(string value) 
            { 
                return new SqlString(HttpUtility.UrlDecode(value)); 
            } 
        }

    放到数据库服务器上。

    之后运行下面的T-SQL代码

    EXEC sp_configure 'show advanced options','1'; 
    GO 
    RECONFIGURE; 
    GO 
    EXEC sp_configure 'clr enabled','1' 
    RECONFIGURE; 
    GO 
    
    ALTER DATABASE DBName SET TRUSTWORTHY ON 
    GO 
    
    CREATE ASSEMBLY 
    [System.Web] FROM 
    'C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\System.Web.dll' 
    WITH permission_set = UNSAFE 
    GO 
    
    CREATE ASSEMBLY SQL_CLR_Url 
    FROM 'D:\SqlClr.dll' 
    WITH PERMISSION_SET = UNSAFE 
    
    GO
    
    CREATE FUNCTION SqlUrlDecode(@urlstr NVARCHAR(4000)) 
    RETURNS NVARCHAR(4000) 
    AS 
    EXTERNAL NAME SQL_CLR_Url.[SqlClr.SystemWeb].UrlDecode 
    GO   

    然后就可以在T-SQL里调用这个函数了。

    select dbo.SqlUrlDecode(Name) from Table

    安全起见,屁股擦完了,记得把clr关掉。

  • 相关阅读:
    无题
    静心
    随笔
    skynet1.0阅读笔记2_skynet的消息投递skynet.call
    skynet1.0阅读笔记_skynet的启动
    Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露
    MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装
    MySql: ”Commands out of sync“Error (Connect/C++)
    Connector/c++ 查询Mysql,出现 can't fetch because not on result set 错误
    mysql 修改密码
  • 原文地址:https://www.cnblogs.com/nankezhishi/p/2295049.html
Copyright © 2011-2022 走看看