2009-08-04 87 views
0

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

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做到这一点,但随后出现异常。

Thanx提前。

回答

0

您是否可以选择使用XML数据类型?它以二进制格式存储数据,并将XML结果作为XmlReader实例公开。您在从数据库中读取数据时正在解析数据,但是如果您使用了一列,则它将已被解析。

在此期间,尝试这样的事情:

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

John thanx我要试试这个。我会让你知道 – JSC 2009-08-05 10:21:25

0

我自己没有测试过这个,但是调用GetSqlBytes的SqlDataReader看起来像是一个更好的选择,因为它公开了Stream属性,您应该能够直接传递给XmlTextReader?

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

相关问题