Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将XML形式的SQL varbinary反序列化为C#字节[]_C#_Xml_Sql Server 2008_Bytearray_Xml Deserialization - Fatal编程技术网

将XML形式的SQL varbinary反序列化为C#字节[]

将XML形式的SQL varbinary反序列化为C#字节[],c#,xml,sql-server-2008,bytearray,xml-deserialization,C#,Xml,Sql Server 2008,Bytearray,Xml Deserialization,我正在做一个小型的概念验证项目,在这个项目中,客户机以字节[]格式发送一个图像文件,服务器将数据插入图像列中的数据库,即VarBinary(MAX)。这部分工作正常,但是,我在尝试将数据转换回字节数组并发送到客户端时遇到问题 数据库中有一个存储过程,负责获取数据并以XML格式返回: SELECT ... asset.Image AS 'Image' FROM ASSETS AS asset WHERE asset.Id = @Id FOR XML PATH('Asset')

我正在做一个小型的概念验证项目,在这个项目中,客户机以
字节[]
格式发送一个图像文件,服务器将数据插入
图像
列中的数据库,即
VarBinary(MAX)
。这部分工作正常,但是,我在尝试将数据转换回字节数组并发送到客户端时遇到问题

数据库中有一个存储过程,负责获取数据并以XML格式返回:

SELECT 
    ...
    asset.Image AS 'Image'
FROM ASSETS AS asset
WHERE asset.Id = @Id
FOR XML PATH('Asset')
示例查询结果如下所示(图像的实际值实际上比这个长很多,但我缩短了它以使其更具可读性):

现在,当我执行程序时,我得到以下错误:

 There is an error in XML document

反序列化程序似乎在
VarBinary
值方面有问题(在我添加此
Image
属性之前,它工作正常)。你知道为什么会这样吗?是否需要使用内存流将数据转换回?

您可能需要了解如何将XML保存到数据库中。如果将XML与XML一起保存到数据库中,则XML反序列化将失败(通常情况下,这取决于您的操作方式)


请参阅如何在将XML数据保存到数据库时消除字节顺序标记。

我不是将XML保存到数据库,我只是从数据库返回一个XML。看看我的存储过程,我意识到了这一点,但在某个时候XML被插入到了数据库中。如果它与BOM一起插入,您在尝试检索它时会遇到问题。XML从未插入到数据库中,它是从存储过程调用中的列生成的,并返回。啊,好的,我的错了
internal static T ExecuteQuery<T>(StoredProcedures storedProcedure, ParameterList parameters)
    {
        using (var connection = GetSqlConnection())
        {
            using (var command = new SqlCommand(storedProcedure.ToString(), connection))
            {
                command.CommandType = System.Data.CommandType.StoredProcedure;

                foreach (var parameter in parameters)
                {
                    command.Parameters.Add(new SqlParameter(parameter.Key.ToString(), parameter.Value));
                }

                connection.Open();

                var data = command.ExecuteScalar();

                return DeserializeXml<T>(data.ToString());
            }
        }
public class Asset
{
    public Asset()
    {
    }

    ...

    [DataMember]
    [XmlElement("Image")]
    public byte[] Image { get; set; }
}
 There is an error in XML document