我有以下目的:

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

我的商店在这 List<ExampleImage> 然后我通过以下功能serialize到一串:

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();
}

然后我通过这个化串存储的过程中 SQL2000 作为一个 NTEXT 然后处理对插入该数据库:

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 参数。我希望serialize功能,以二进制编码正确但我可能是错误的。

任何想法是什么的问题,或者也许更好的办法节省了一大堆的影像在一次?

编辑: 我觉得发生了什么,是的程序做的 byte[] 进入a base64string,然后获得通过存储proc为base64.我然后拯救这个base64string入图像的领域中SQL和阅读它,因为一个 btye[].因此,我认为我需要以某种方式得到它从base64到 byte[] 之前插入它在我的桌子吗?

编辑: 我开始觉得我的唯一选择是改变储存proc只是做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化)

其他提示

而不是将它XML,我会serialize它字节[]和存储,在varbinary(最大值)的类型领域在数据库中。

你可以尝试将其转换为base64,然后把它保存文本领域或东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top