简体   繁体   English

是否可以从SqlDbType.Xml类型的输出SqlParameter创建XmlReader?

[英]Is it possible to create an XmlReader from output SqlParameter of type SqlDbType.Xml?

This is my parameter definition: 这是我的参数定义:

var param = new SqlParameter
{
    ParameterName = "@param",
    SqlDbType = SqlDbType.Xml,
    Direction = ParameterDirection.Output,
    Size = int.MaxValue
};
command.Parameters.Add(param);

Then I do: 然后我做:

command.ExecuteNonQuery();

And finally: 最后:

XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
return serializer.Deserialize(
    new MemoryStream(Encoding.UTF8.GetBytes(param.Value.ToString())))
    as MyClass;

Do I really need to convert to string and then byte array? 我真的需要转换为字符串然后字节数组吗?

Use Parameter.SqlValue , will return a SqlXml instance and you can use CreateReader to get an XML reader. 使用Parameter.SqlValue将返回一个SqlXml实例,您可以使用CreateReader来获取XML阅读器。 Then use the XmlSerializer.Deserialize(XmlReader) overwrite. 然后使用XmlSerializer.Deserialize(XmlReader)覆盖。

If the XML is large, you should consider using CommandBehavior.SequentialAccess . 如果XML很大,则应考虑使用CommandBehavior.SequentialAccess

You can also do in this way: 你也可以这样做:

          cnn = new SqlConnection();
          cnn.ConnectionString = "xxxxxxxxxxxxxxxxx";
          cnn.Open();

          string selectQry = "SELECT [Xml] FROM [Table1] WHERE [PK_ID] = @ID";
          cmd = new SqlCommand(selectQry, cnn);
          cmd.Parameters.AddWithValue("@ID", ID);

          XmlReader reader = cmd.ExecuteXmlReader();

          if (reader.Read())
             xdoc.Load(reader);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM