2012-03-10 134 views
1

相同的查詢在SQL Server中正常工作。我需要它返回從C#中的數據庫表讀取的所有行。爲什麼我的SQLDataReader只是讀取數據庫表的最後一行?

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = connection; 
cmd.CommandText = @"SELECT TypeName, Sum(HitNo) FROM TypeHit GROUP BY TypeName"; 

SqlDataReader sdr = cmd1.ExecuteReader(); 
sdr.Read(); 

if (sdr.HasRows) 
{ 
    while (sdr.Read()) 
    { 
     TextBox1.Text = sdr.GetString(0) +" at " + sdr.GetInt32(1); 
    } 
} 

回答

1

,即將推動讀者到下一個數據塊?

DataReader.Read Method

你還重寫,因爲while (sdr.Read())在讀者每條記錄TextBox「 - 文本屬性是一個循環。

using(SqlDataReader sdr = cmd1.ExecuteReader()) 
{ 
     if (sdr.HasRows) 
     { 
      while (sdr.Read()) 
      { 
       TextBox1.Text += sdr.GetString(0) + " at " + sdr.GetInt32(1) + Environment.NewLine; 
      } 
     } 
     else 
     { 
      TextBox1.Text = "No rows found."; 
     } 
} 

Retrieving Data Using a DataReader (ADO.NET)

+0

謝謝蒂姆,這是非常感謝 – Seesharp 2012-03-10 12:47:29

0

你需要在循環追加結果:

TextBox1.Text = TextBox1.Text+sdr.GetString(0) +" at " + sdr.GetInt32(1); 

此外,從性能的角度來看,這是更好地使用StringBuilder:你爲什麼要使用sdr.Read()

StringBuilder bld = new StringBuilder(); 
if (sdr.HasRows)  
{  
    while (sdr.Read())  
    {  
     bld.Append(sdr.GetString(0)); 
     bld.Append(" at "); 
     bld.Append(sdr.GetInt32(1));  
    }  
} 
TextBox1.Text = bld.ToString(); 
+0

我已經試過,它不工作,即使當我計算sdr返回的行數只是一個 – Seesharp 2012-03-10 12:44:29

0

在每個循環更換了獲取數據的最後TextBox1.Text。
所以你最終只有最後一行。如果你需要看到所有的結果,你需要這樣的東西。

StringBuilder sb = new StringBuilder(); 
    while (sdr.Read()) 
    { 
     sp.AppendLine(sdr.GetString(0) +" at " + sdr.GetInt32(1)); 
    } 
    TextBox1.Text = sb.ToString(); 

多行屬性更改文本框來調整的TextBox1中顯示多行

哎喲......錯過循環之前的假sdr.Read()。 ...

相關問題