从SQL Server 2005读取UTF8(XML)数据是最有效的方法

时间:2009-08-04 15:31:14

标签: c# sql xml streaming serialization

我想从SQL Server 2005中读取大量数据(单列nvarchar(max))并将其反序列化为对象。我们目前正在使用以下内容,但这还不够快,是否有更好/更有效的方法呢?

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 :(得分:0)

我自己没有测试过,但是调用GetSqlBytes的SqlDataReader似乎是一个更好的选择,因为它暴露了一个Stream属性,你应该能够直接传递给XmlTextReader?

MSDN上有关于GetSqlBytes here的一些信息。

答案 1 :(得分:0)

您是否可以选择切换为使用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. 为什么要将字符串转换为字节并返回字符串?