相同的查询在SQL Server中正常工作。我需要它来返回从c#中的DB表中读取的所有行。
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);
}
}
答案 0 :(得分:1)
为什么使用sdr.Read()
,这会让读者进入下一个数据块?
由于TextBox
是一个循环,你还会覆盖读者中每条记录的while (sdr.Read())
' - Text属性。
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.";
}
}
答案 1 :(得分:0)
你需要在循环中附加结果:
TextBox1.Text = TextBox1.Text+sdr.GetString(0) +" at " + sdr.GetInt32(1);
此外,从性能的角度来看,最好使用StringBuilder
:
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();
答案 2 :(得分:0)
在每个循环中,用提取的数据替换最后一个TextBox1.Text 所以你最后只得到最后一行。如果你需要看到所有结果,你需要这样的东西。
StringBuilder sb = new StringBuilder();
while (sdr.Read())
{
sp.AppendLine(sdr.GetString(0) +" at " + sdr.GetInt32(1));
}
TextBox1.Text = sb.ToString();
还将TextBox MultiLine 属性更改为 True ,调整大小 TextBox1以显示多行
哎...在循环之前错过了伪造的sdr.Read()....