3

这是我的参数定义:

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

然后我做:

command.ExecuteNonQuery();

最后:

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

我真的需要先转换为字符串然后再转换为字节数组吗?

4

2 回答 2

4

使用Parameter.SqlValue, 将返回一个SqlXml实例,您可以使用它CreateReader来获取 XML 阅读器。然后使用XmlSerializer.Deserialize(XmlReader)覆盖。

如果 XML 很大,您应该考虑使用CommandBehavior.SequentialAccess.

于 2011-03-05T07:47:45.220 回答
0

你也可以这样做:

          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);
于 2011-03-04T22:27:59.443 回答