You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:00:01