gpt4 book ai didi

c# - 使用要保存到 SQL 数据库的图像序列化对象

转载 作者:太空宇宙 更新时间:2023-11-03 22:26:18 27 4
gpt4 key购买 nike

我有以下对象:

[Serializable]
public class ExampleImage
{
public int ID { get; set; }
public string Filename { get; set; }
public byte[] Content { get; set; }
}

我将其存储在 List<ExampleImage> 中然后我将其传递给以下函数以将其序列化为字符串:

static string SerializeObjectToXmlString(object o)
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(o.GetType());
System.IO.StringWriter writer = new System.IO.StringWriter();
serializer.Serialize(writer, o);
return writer.ToString();
}

然后我将这个序列化的字符串作为 NTEXT 传递给 SQL2000 中的存储过程然后处理将其插入数据库:

SELECT * INTO #TempImages
FROM OpenXML(@iDoc, '/ArrayOfExampleImage/ExampleImage')
WITH ([Filename] VARCHAR(255) './Filename', [Content] IMAGE './Content')

我遇到的问题是图像被破坏了。 btye[]没有正确保存到数据库中。其他领域就好了。这是我第一次尝试通过 XML 将二进制数据发送到 SQL,所以我很可能在这一点上做错了什么。是我的SerializeObjectToXmlString解决问题,它不处理 byte[] 的序列化正确的,也许是 OpenXML SQL 函数,甚至是我将 XML 作为 NTEXT 发送的事实参数。我希望序列化函数能够正确编码二进制文件,但我可能错了。

知道问题是什么或者一次保存一堆图像的更好方法吗?

编辑:我认为正在发生的事情是序列化程序正在生成 byte[]转换为 base64 字符串,然后将其作为 base64 传递给存储过程。然后,我将这个 base64 字符串保存到 SQL 中的图像字段中,并将其作为 btye[] 读出。 .所以我想我需要以某种方式将它从 base64 转换为 byte[]在将它插入我的表之前?

编辑: 我开始认为我唯一的选择是将存储过程更改为一次只处理 1 个图像而不使用 XML 并只传入 byte[]作为Image键入并将所有调用包装在一个事务中。

最佳答案

正如 Gaidin 所建议的,base64 是最佳选择。这是将二进制数据写入 XML 的常用方法。您可以使用以下代码:

public class ExampleImage
{
public int ID { get; set; }
public string Filename { get; set; }

[XmlIgnore]
public byte[] Content { get; set; }

[XmlElement("Content")]
public string ContentBase64
{
get { return Convert.ToBase64String(Content); }
set { Content = Convert.FromBase64String(value); }
}
}

(顺便说一句,Serializable 属性对 XML 序列化没有意义)

关于c# - 使用要保存到 SQL 数据库的图像序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267325/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com