Можно ли создать XmlReader из выходного SqlParameter типа SqlDbType.Xml? - PullRequest
3 голосов
/ 05 марта 2011

Это мое определение параметра:

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;

Мне действительно нужно преобразовать встрока, а затем байтовый массив?

Ответы [ 2 ]

4 голосов
/ 05 марта 2011

Используйте Parameter.SqlValue, вернет экземпляр SqlXml, и вы можете использовать CreateReader, чтобы получить средство чтения XML. Затем используйте перезапись XmlSerializer.Deserialize(XmlReader).

Если XML большой, вам следует рассмотреть возможность использования CommandBehavior.SequentialAccess.

0 голосов
/ 05 марта 2011

Вы также можете сделать так:

          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);
...