使用環境:
SQL Server2005;
VS2010;
關于SQL中部署CLR程式集的方法,網上一搜一大把,需要了解的自行查閱,呵呵。
SQL中處理字元串實在是太弱了,連數組都不能處理,就更别說json字元串了,好吧,它不能處理,我就給它加個處理程式集(還好2005已經加入了這個功能)。
首先對于CLR我也不太懂,而且到現在我也沒搞懂怎麼把一個dll注冊到SQL,俺是直接用VS2010建立一個sql sever的資料庫項目,然後部署到SQL,能省多少操作就省多少操作。
這裡說一下CLR 資料庫項目,第一次開發實在沒搞懂引用竟然不能選擇本地的Newtonsoft.Json.dll檔案,而且好多c#類庫也沒有,這讓我怎麼使用Newtonsoft.Json啊?
等待半天提示錯誤:在SQL目錄中找不到程式集:system.core, version=3.5.0.0 這裡我又暈了半天,如何把這個東東搞進SQL的目錄呢?終于有位仁兄說:
SQL SERVER并不支援System.Core.dll程式集,應先加載:
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = true
GO
sp_configure 'clr enabled', 1
RECONFIGURE
ALTER DATABASE [stzpbbs] SET TRUSTWORTHY ON
CREATE ASSEMBLY [System.Core]
AUTHORIZATION [dbo]
FROM
'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'
WITH PERMISSION_SET = UNSAFE
改成自己的資料庫名稱,執行,成功,點開資料庫的程式集目錄,果然有了,那就再部署、、、、、又提示在SQL目錄中找不到程式集:System.Xml.Linq,那意思剛才的system.core已經引入正确了,到這裡,我沒有再繼續下去了,既然system.core可以直接引入資料庫,Newtonsoft.Json行不行呢?順這個思路,總共需要引入的庫有:
System.Core.dll
System.Xml.Linq.dll
SMdiagnostics.dll
System.Runtime.Serialization.dll
Newtonsoft.Json.dll
注意,PERMISSION_SET = UNSAFE ,全部設定為unsafe。
Newtonsoft.Json.dll添加成功後,再打開vs2010建立資料庫項目,添加引用,在清單就能看到Newtonsoft.Json這個庫 了,哈哈,點選引用,建立使用者自定義函數,現在可以直接使用Newtonsoft.Json的方法反序列化json字元串了,内容如下:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString Json(string json,string key)
{
// 在此處放置代碼
JObject ja = (JObject)JsonConvert.DeserializeObject(json);
string re = ja[key].ToString();
return new SqlString(re);
}
public static SqlString JsonArray(string json,int s, string key)
JArray ja = (JArray)JsonConvert.DeserializeObject(json);
string re = ja[s][key].ToString();
};
最後部署,資料庫中調用方法:
print dbo.Json('{key:"001",value:"你好"}','value')
print dbo.JsonArray('[{key:"001",value:"你好"},{key:"002",value:"不好"}]',1,'value')
你好
不好
申明:作者寫博是為了總結經驗,和交流學習之用。
如需轉載,請盡量保留此申明,并在文章頁面明顯位置給出原文連接配接。謝謝!