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

如何解决用户控件内数据库搜索返回空结果的问题

问题修复方案

核心问题列表

  • 动态创建的Label控件未添加到窗体控件集合,即使查询到数据界面也无法显示,容易误判为无返回结果
  • 直接拼接SQL字符串,存在SQL注入风险,同时搜索内容含特殊字符(如单引号)时会导致SQL语法错误,返回空结果
  • 每次触发搜索时未清空旧的动态控件,会出现控件重叠残留问题
  • 连接字符串不完整,可能未正确连接到目标数据库或对应表
  • 冗余的二进制读取代码未产生实际作用,占用额外资源

修复后的代码

using System.Data.SqlClient;

SqlConnection cn;
public Form1()
{
    InitializeComponent();
    // 补充完整连接字符串,替换为你的实际数据库路径
    cn = new SqlConnection(@"Data Source=(LocalDB);AttachDbFilename=你的数据库完整路径.mdf;Integrated Security=True");
}

private void Form1_Load(object sender, EventArgs e)
{
    GetData();
}

private void GetData()
{
    // 提前清空之前动态添加的Label,建议提前在窗体拖入一个Panel容器专门存放动态控件
    foreach (Control c in panel1.Controls)
    {
        c.Dispose();
    }
    panel1.Controls.Clear();
    int labelTop = 10; // 控制Label垂直位置,避免重叠

    try
    {
        cn.Open();
        // 使用参数化查询避免注入和语法错误
        string sql = "Select * from Bills where billname like @SearchContent";
        SqlCommand cm = new SqlCommand(sql, cn);
        cm.Parameters.AddWithValue("@SearchContent", "%" + txtSearch.Text + "%");
        SqlDataReader dr = cm.ExecuteReader();
        
        while (dr.Read())
        {
            Label name = new Label();
            name.Text = dr["billname"].ToString();
            name.Top = labelTop;
            name.Left = 10;
            panel1.Controls.Add(name);

            Label descrip = new Label();
            descrip.Text = dr["billdescrip"].ToString();
            descrip.Top = labelTop;
            descrip.Left = 150;
            panel1.Controls.Add(descrip);

            Label amount = new Label();
            amount.Text = dr["billamount"].ToString();
            amount.Top = labelTop;
            amount.Left = 350;
            panel1.Controls.Add(amount);

            labelTop += 30;
        }
        dr.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("查询出错:" + ex.Message);
    }
    finally
    {
        if (cn.State == System.Data.ConnectionState.Open)
        {
            cn.Close();
        }
    }
}

private void txtSearch_TextChanged(object sender, EventArgs e)
{
    GetData();
}

验证步骤

  • 先在数据库管理工具执行测试SQL Select * from Bills where billname like '%测试关键词%',确认SQL和数据本身没有问题
  • 确认连接字符串中的数据库路径、认证信息配置正确
  • 若未使用Panel容器,可直接修改为操作this.Controls,注意增加标识避免误删窗体固定控件

内容的提问来源于stack exchange,提问作者Forever Unknown Nicholas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:08