CLR函数如何压缩NTEXT类型字段
小编给大家分享一下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类型字段”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341