您好,登錄后才能下訂單哦!
小編給大家分享一下CLR函數如何壓縮NTEXT類型字段,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
CLR(公共語言運行庫)和Java虛擬機一樣也是一個運行時環境,它負責資源管理(內存分配和垃圾收集),并保證應用和底層操作系統之間必要的分離。為了提高平臺的可靠性,以及為了達到面向事務的電子商務應用所要求的穩定性級別,CLR還要負責其他一些任務,比如監視程序的運行。按照.NET的說法,在CLR監視之下運行的程序屬于"受管理的"(managed)代碼,而不在CLR之下、直接在裸機上運行的應用或者組件屬于"非受管理的"(unmanaged)的代碼 。可以在 SQL Server 實例中創建可在 Microsoft .NET Framework 公共語言運行時 (CLR) 中創建的程序集中進行編程的數據庫對象。可以充分利用公共語言運行時所提供的豐富的編程模式的數據庫對象包括聚合函數、函數、存儲過程、觸發器以及類型。下面給大家舉個sql server 2005 使用clr函數壓縮ntext類型字段例子:
vs2005為數據新建一個數據庫工程。
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.IO; using System.IO.Compression; using System.Text; public partial class Gzip { [Microsoft.SqlServer.Server.SqlFunction] public static SqlChars GzipToString(SqlBytes gBytes) { byte[] bytes = gBytes.Value; bytes = Decompress(bytes); string str = Encoding.GetEncoding(936).GetString(bytes); SqlChars sqlchars = new SqlChars(str); return (sqlchars); } [Microsoft.SqlServer.Server.SqlFunction] public static SqlBytes StringToGzip(SqlChars chars) { byte[] bytes = Encoding.GetEncoding(936).GetBytes(chars.Buffer); bytes = Compress(bytes); SqlBytes gBytes = new SqlBytes(bytes); return (gBytes); } #region 采用.net系統自帶Gzip壓縮類進行流壓縮 /// <summary> /// 壓縮數據 /// summary> /// <param name="data">param> /// <returns>returns> public static byte[] Compress(byte[] data) { byte[] bData; MemoryStream ms = new MemoryStream(); GZipStream stream = new GZipStream(ms, CompressionMode.Compress, true); stream.Write(data, 0, data.Length); stream.Close(); stream.Dispose(); //必須把stream流關閉才能返回ms流數據,不然數據會不完整 //并且解壓縮方法stream.Read(buffer, 0, buffer.Length)時會返回0 bData = ms.ToArray(); ms.Close(); ms.Dispose(); return bData; } /// <summary> /// 解壓數據 /// summary> /// <param name="data">param> /// <returns>returns> public static byte[] Decompress(byte[] data) { byte[] bData; MemoryStream ms = new MemoryStream(); ms.Write(data, 0, data.Length); ms.Position = 0; GZipStream stream = new GZipStream(ms, CompressionMode.Decompress, true); byte[] buffer = new byte[1024]; MemoryStream temp = new MemoryStream(); int read = stream.Read(buffer, 0, buffer.Length); while (read > 0) { temp.Write(buffer, 0, read); read = stream.Read(buffer, 0, buffer.Length); } //必須把stream流關閉才能返回ms流數據,不然數據會不完整 stream.Close(); stream.Dispose(); ms.Close(); ms.Dispose(); bData = temp.ToArray(); temp.Close(); temp.Dispose(); return bData; } #endregion }
給數據庫增加一個varbinary(MAX) 字段,把壓縮以后的轉移過來以后刪除原來的字段。
然后使用clr函數的這兩個如下
select: SELECT top 10 dbo.GzipToString([content1]) FROM [content_02] insert: insert into [content_02] ([content1]) values(dbo.StringToGzip('123abc'))
看完了這篇文章,相信你對“CLR函數如何壓縮NTEXT類型字段”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。