2008-12-18 67 views
2

如果我做這樣的事情:ADO.NET DataReader是否讀取整行,還是隻讀取「獲取」列?

using (SqlCommand cmd = new SqlCommand("SELECT * FROM TBL")) 
{ 
    using (SqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      string s = reader.GetString(7); 
     } 
    } 
} 

做的read()調用讀取整個行到內存中,還是在GetString的(7)調用意味着讀者僅曾經在7列讀取數據?

回答

4

它讀取整個讀取操作行。

+0

ADO.NET中是否有任何內容不能讀取整行,還是一切都必須受SELECT語句中包含的列限制? – MusiGenesis 2008-12-18 01:13:17

1

讀操作讀取整行。行的大小由您的select語句確定。所以,如果你有一千列,只需要4列,你可以在你的選擇中做到這一點。如果另一方面,如果列1是Y,則需要5列,如果是N,則需要8列,那麼你的運氣不好,那就不能用單個select * from table來完成。

無法完成的原因是對數據庫的調用盡可能快地發回數據流(結果集),兩者之間沒有進一步的通信,即使存在,也是如此將不得不在UNSENT行上,因爲當前行將被髮送和接收。要做到你所說的話,需要在每一列上進行雙向溝通,除非在真正的特殊情況下,否則會導致性能下降。這樣做甚至在行的基礎上通常是低效的。