2013-02-16 60 views
1

我有一個存儲過程返回一定數量的行。SqlDataAdapter和SqlDataReader

情況1:當我使用的SqlDataAdapter

SqlDataAdapter sdAdapter = new SqlDataAdapter(); 
ds = new DataSet(); 
sdAdapter.SelectCommand = myCommand; 
sdAdapter.Fill(ds); 
int recordCount = ds.Tables[0].Rows.Count; 

情況2:當我使用SqlDataReader的

SqlDataReader reader = myCommand.ExecuteReader(); 
if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
    recordCount++; 
    } 
} 

在情況1中,總記錄爲15,其是正確的。

在情況2中,出於某種原因,reader.HasRows返回false。

我在語法上做錯了什麼?我相信我的命令已經正確構建,因爲我確實得到了第一種情況的計數。

任何幫助將非常感激。

謝謝

+0

可以或許表明你正在使用的SQL命令.. – MethodMan 2013-02-16 01:47:02

+1

不可能從您發佈的代碼... – 2013-02-16 01:47:49

+0

喜地說,如果我評論的reader.HasRows案例2 ,我仍然可以執行reader.Read()並獲取recordCount的值。所以只是想知道是否有可能hasRows返回false,但仍然有讀者指向查詢的內容? – 2013-02-16 02:49:35

回答

0

if (reader.HasRows)是多餘的。當你說while (reader.Read()),它只會有循環,如果有任何行。另外,this link將解釋HasRows需要一個可滾動的遊標。閱讀關於遊標here

+0

非常感謝你:) – 2013-02-16 03:24:26

1

1.A DataReader在連接環境中工作, ,而DataSet在斷開連接的環境中工作。 2.A DataSet表示由任意數量的相關DataTable對象組成的數據在內存中的緩存。 DataTable對象表示內存數據的表格塊。

更詳細的去sqldataadapter or sqldatareader