能否遍历SqlDataReader并在单个TextBox中逐行显示数据?
如何将SqlDataReader的数据逐行显示在单个TextBox中?
嘿,我看到你的问题了——你现在的代码之所以只显示最后一行数据,是因为每次循环都直接替换了TextBox7.Text的内容,而不是把新行追加进去。咱们来改改代码,让所有行都能显示在同一个TextBox里:
基础改进版本
直接通过+=追加内容,并添加换行符来分隔每一行:
protected void Button1_Click(object sender, EventArgs e) { // 使用using语句自动释放资源,避免手动关闭的疏漏 using (SqlConnection MyConnection = new SqlConnection("Data Source=VIJAYSTIWARI\\SQLEXPRESS;Initial Catalog=earthquake;User ID=sa;Password=HereIsPwd;")) { MyConnection.Open(); using (SqlCommand MyCommand = new SqlCommand("SELECT * FROM eq", MyConnection)) { using (SqlDataReader mydr = MyCommand.ExecuteReader()) { if (mydr.HasRows) { // 先清空TextBox原有内容 TextBox7.Text = string.Empty; while (mydr.Read()) { // 追加当前行的第2列数据(索引从0开始),并添加换行 // 注意:如果字段可能为NULL,需要先判断mydr.IsDBNull(1) if (!mydr.IsDBNull(1)) { TextBox7.Text += mydr.GetString(1) + Environment.NewLine; } else { TextBox7.Text += "(空值)" + Environment.NewLine; } } } } } } }
更高效的版本(适合数据量大的场景)
如果你的数据表行数较多,反复修改TextBox.Text会频繁触发控件刷新,影响性能。这时候可以用StringBuilder先拼接所有内容,再一次性赋值给TextBox:
protected void Button1_Click(object sender, EventArgs e) { using (SqlConnection MyConnection = new SqlConnection("Data Source=VIJAYSTIWARI\\SQLEXPRESS;Initial Catalog=earthquake;User ID=sa;Password=HereIsPwd;")) { MyConnection.Open(); using (SqlCommand MyCommand = new SqlCommand("SELECT * FROM eq", MyConnection)) { using (SqlDataReader mydr = MyCommand.ExecuteReader()) { if (mydr.HasRows) { StringBuilder sb = new StringBuilder(); while (mydr.Read()) { if (!mydr.IsDBNull(1)) { sb.AppendLine(mydr.GetString(1)); } else { sb.AppendLine("(空值)"); } } // 一次性赋值给TextBox TextBox7.Text = sb.ToString(); } } } } }
几个关键的改进点:
- 使用
using语句:自动管理数据库连接、命令和阅读器的资源,避免忘记关闭连接导致的资源泄漏。 - 追加而非替换内容:用
+=或StringBuilder.AppendLine()把每一行内容添加到已有内容后面,而不是直接覆盖。 - 处理NULL值:添加
mydr.IsDBNull(1)的判断,避免当数据库字段为NULL时调用GetString()抛出异常。 - 换行显示:用
Environment.NewLine保证在不同系统下都能正确换行,让每一行数据单独显示。
内容的提问来源于stack exchange,提问作者vijaydidmca
相关产品推荐
相关产品推荐

