2009-08-04 157 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的一些信息。

相關問題