我想从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来做,但后来我得到例外。
提前完成。
答案 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);
}
}
XmlTextReader
。