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

ASP.NET多行文本框多名称查询结果合并显示到GridView问题

解决GridView仅显示最后一条查询结果的问题

你的问题出在每次循环都重新给GridView绑定数据源,之前的查询结果会被覆盖,最终只保留最后一次循环的查询结果。要合并所有结果,应该一次性查询所有符合条件的记录,再绑定到GridView。

修改思路

  1. 先过滤掉TextBox中空的行,避免无效查询
  2. 构建参数化的IN查询语句(避免SQL注入风险)
  3. 一次性执行查询,将所有结果绑定到GridView

修改后的代码

protected void btntoplusorgu_Click(object sender, EventArgs e)
{
    // 分割文本框内容并过滤空行
    var satırlar = txttoplu.Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    
    if (satırlar.Length == 0)
    {
        GridView1.DataSource = null;
        GridView1.DataBind();
        return;
    }

    string baglanti = ConfigurationManager.ConnectionStrings["TAKS"].ConnectionString;
    using (SqlConnection con = new SqlConnection(baglanti))
    {
        StringBuilder sbCommand = new StringBuilder("Select * from Veriler where Tckn IN (");
        
        // 构建参数化的IN子句
        for (int i = 0; i < satırlar.Length; i++)
        {
            string paramName = $"@Tckn{i}";
            sbCommand.Append(paramName);
            if (i < satırlar.Length - 1)
            {
                sbCommand.Append(", ");
            }
        }
        sbCommand.Append(")");

        SqlCommand cmd = new SqlCommand(sbCommand.ToString(), con);
        
        // 添加所有参数
        for (int i = 0; i < satırlar.Length; i++)
        {
            cmd.Parameters.AddWithValue($"@Tckn{i}", satırlar[i].Trim());
        }

        con.Open();
        SqlDataReader rdr = cmd.ExecuteReader();
        GridView1.DataSource = rdr;
        GridView1.DataBind();
    }
}

关键说明

  • 使用StringSplitOptions.RemoveEmptyEntries直接过滤空行,省去手动判断
  • 采用参数化IN查询,每个值对应一个参数,彻底避免SQL注入
  • 只创建一次连接和命令,一次性查询所有结果,再绑定到GridView,不会覆盖之前的数据

内容的提问来源于stack exchange,提问作者Harp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:18:31