我只是想简单易懂。 该软件将包含一个 XML 文件的 ZIP/RAR 放入 LDATA 列中。
要访问 XML 文件,我需要按顺序执行这些操作:
可以吗?
提前致谢。
// compile for .NET 4.8
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
namespace MySqlClr;
public class ZipHelpers
{
[SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static SqlBytes Unzip(byte[] zipped, string? entryName)
{
using var archive = new ZipArchive(new MemoryStream(zipped), ZipArchiveMode.Read);
var entry = archive.Entries.FirstOrDefault(e => entryName == null || entryName == e.Name)
?? throw new Exception("No entries in zip");
using var file = entry.Open();
var ms = new MemoryStream();
file.CopyTo(ms);
ms.Position = 0;
return new SqlBytes(ms);
}
}
您需要将其添加为 UNSAFE
程序集,这意味着您需要对其进行签名,根据签名创建非对称密钥或证书,然后根据该密钥/证书创建 SQL Server 登录名(而不是用户) ,并授予登录
UNSAFE ASSEMBLY
权限。您还需要首先对
System.IO.Compression
库执行相同的操作,只不过您可以使用它已有的签名。然后就可以创建函数并使用它了
CREATE FUNCTION dbo.Unzip(@zipped varbinary(max), @entryName nvarchar(256))
RETURNS varbinary(max)
WITH RETURNS NULL ON NULL INPUT
AS EXTERNAL NAME [YourAssembly].[MySqlClr.ZipHelpers].[Unzip];