首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从SQL Server获取zip文件列表

从SQL Server获取zip文件列表
EN

Stack Overflow用户
提问于 2018-11-26 20:13:47
回答 1查看 813关注 0票数 0

我在SQL Server数据库中有一个表,其中包含一个带有zip存档的varbinary(max)列。如何在不解压的情况下获得这些存档的列表?我的C#应用程序读取这些存档的列表,我需要添加有关内容的更多信息。

对于文件,我使用来自System.IO.Compression.FileSystem程序集的ZipFile类,但是如何传递可变二进制数据而不是文件名(例如,如果我创建CLR函数)?

EN

Stack Overflow用户

发布于 2018-11-27 06:32:20

这就是你要找的东西吗?

SQLCLR C#函数...

代码语言:javascript
运行
复制
using System.Data.SqlTypes;
using System.IO;
using System.IO.Compression;
using System.Linq;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlString ZipEntries(SqlBytes data) {
        using (var stream = new MemoryStream(data.Value))
        using (var archive = new ZipArchive(stream))
            return new SqlString(string.Join(",", archive.Entries.Select(e => e.Name)));
    }
}

下面是我用来测试的SQL。令人惊讶的是,它起作用了。

代码语言:javascript
运行
复制
-- Create table with ZIP archive column...
CREATE TABLE dbo.ZipImages(ZipArchive VARBINARY(MAX));
GO

-- ... then insert ZIP archive content into the dbo.ZipImages table ...
-- (code not included)
GO

-- ... then prove it works.
SELECT dbo.ZipEntries(ZipArchive) FROM dbo.ZipImages;
GO

您的数据库可能/可能会抱怨System.IO.Compression不可用,在这种情况下,您可以尝试...

代码语言:javascript
运行
复制
ALTER DATABASE [<your database>] SET TRUSTWORTHY ON;

CREATE ASSEMBLY [System.IO.Compression]
FROM N'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;

(如果您不是DBA,您将希望快速结交朋友。)

显然,这只是一个基本的UDF --您可能希望做一些稍微不同的事情(比如使它成为一个基于表的CLR UDF,逐个返回条目)。

如果需要从数据列中的归档文件中打开文件,则会变得更加棘手。除此之外,您还必须将System.IO.Compression.File作为程序集添加,这(不幸的是)是不安全的,并且会使很多事情复杂化……

代码语言:javascript
运行
复制
CREATE ASSEMBLY [System.IO.Compression.FileSystem]
FROM N'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.FileSystem.dll'
WITH PERMISSION_SET = UNSAFE;
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53480908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档