Чтение UTF8 (XML) данных из SQL Server 2005 наиболее эффективным способом - PullRequest
0 голосов
/ 04 августа 2009

Я хочу прочитать много данных (один столбец nvarchar (max)) из SQL Server 2005 и десериализовать их в объект. В настоящее время мы используем следующее, но это недостаточно быстро, есть ли лучший / эффективный способ сделать это?

using(MemoryStream stream = Encoding.UTF8.GetBytes((string)cmd.ExecuteScalar()))
{
  XmlTextReader xmlReader;
  DataContractSerializer deserializer;

  deserializer = new DataContractSerializer(typeToDeserialize);
  xmlReader = new XmlTextReader(stream);
  return deserializer.ReadObject(xmlReader);
} 

Я также пытался сделать это с помощью SqlDataReader и GetBytes, но затем я получаю исключения.

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 04 августа 2009

Есть ли у вас возможность переключения для использования типа данных XML? Он хранит данные в двоичном формате и предоставляет результаты XML как экземпляр XmlReader. Вы анализируете данные, когда читаете их из базы данных, но если вы используете столбец XML, они уже будут проанализированы.

А пока попробуйте что-то вроде этого:

string s;
using (SqlConnection conn = new SqlConnection(""))
{
    using (SqlCommand cmd = new SqlCommand("", conn))
    {
        s = (string) cmd.ExecuteScalar();
    }
}
using (StringReader sr = new StringReader(s))
{
    using (XmlReader reader = XmlReader.Create(sr))
    {
        DataContractSerializer deserializer = 
           new DataContractSerializer(typeToDeserialize);
        return deserializer.ReadObject(reader);
    }
}
  1. Не используйте XmlTextReader больше.
  2. Зачем преобразовывать строку в байты и обратно в строку?
0 голосов
/ 04 августа 2009

Я не проверял это сам, но SqlDataReader с вызовом GetSqlBytes кажется лучшим выбором, поскольку он предоставляет свойство Stream, которое вы должны иметь возможность напрямую передавать в XmlTextReader?

На MSDN есть некоторая информация о GetSqlBytes здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...