在SQL Server中调用.NET程序集
2011-12-20 19:15
337 查看
使用到这东西完全是个巧合和无奈之举。不小心在数据库中插入了一些HttpUtility.UrlEncodeUnicode之后的数据。数据库里的一些字段成了%uxxxx%uxxxx这样的结构。
搜索了半天T-SQL UrlDecode的函数,发现都不支持上面这种Unicode的。自己对T-SQL又不熟悉,时间也很紧迫。
解铃还须系铃人,想到在T-SQL里调用HttpUtility.UrlDecode应该会比较方便。查了一下,大概代码如下。这东西用完就忘,记下来备查吧。
建立一个DLL,一个类,代码如下。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
放到数据库服务器上。
之后运行下面的T-SQL代码
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
然后就可以在T-SQL里调用这个函数了。
select dbo.SqlUrlDecode(Name) from Table
安全起见,屁股擦完了,记得把clr关掉。
搜索了半天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)); } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
放到数据库服务器上。
之后运行下面的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
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
然后就可以在T-SQL里调用这个函数了。
select dbo.SqlUrlDecode(Name) from Table
安全起见,屁股擦完了,记得把clr关掉。
相关文章推荐
- 在SQL Server中调用.NET程序集
- 在SQL Server中调用.NET程序集
- SQL Server的存储过程调用Com组件
- SQL Server中使用CLR调用.NET方法
- SQL Server 调用dll
- SQL Server 存储过程调用和参数运用
- 解决SQL Server 2008安装时出现“ 不能在控件上调用 Invoke 或 BeginInvoke ”错误的方法
- SQL Server 2005 调用vs.net 托管代码实例
- SQL Server安装问题 mof 编译器无法连接到wmi服务器 不能在控件上调用Invoke或 BeginInvoke
- 在SQL SERVER 2005中调用Web Service
- 其实iBatis可以在调用新增记录的方法后 返回主键值 (Oracle,Sql Server,Mysql)
- 在asp中调用sql server的存储过程
- SQL Server中调用WebService的实例
- 在SQL Server 2008中调用.net,dll
- SQL Server 2005 - 如何在预存程序中调用另外一个预存程序
- asp.net SQL Server 存储过程分页及代码调用
- SQL Server 访问URL 调用WebServer
- 在asp中调用sql server的存储过程
- SQL Server安装问题 mof 编译器无法连接到wmi服务器 不能在控件上调用Invoke或 BeginInvoke
- Java调用SQL Server的存储过程详解