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

DataGridView单元格编辑及按钮查询数据库时程序卡顿求助

嘿,我看你遇到了点击按钮后程序卡顿的问题——这几乎肯定是因为你把数据库查询这类耗时操作直接放在UI线程里执行了!UI线程本来要负责界面渲染、响应用户点击这些事儿,一旦被耗时的数据库操作占住,就没法处理其他交互,自然会出现卡顿甚至假死的情况。

咱们先拆解问题根源:你在dataGridView1_CellEndEdit这个UI线程触发的事件里,直接调用了con.Open()和SqlDataAdapter的同步查询操作,这些操作会阻塞UI线程直到数据库返回结果,这就是卡顿的核心原因。

接下来给你一套可行的解决方案,附上修改后的代码:


1. 改用异步/await执行数据库操作

把事件方法改成异步方法,用await把耗时的数据库操作放到后台线程,让UI线程能持续响应用户交互:

2. 用using语句管理资源

用using包裹数据库连接、数据适配器等资源,确保它们自动释放,避免资源泄漏,也不用手动写Close():

3. 使用参数化查询(必做!)

别用字符串拼接查询条件,参数化查询既能防止SQL注入,也能避免因输入格式导致的查询错误。


修改后的完整代码示例:

// 标记方法为async,支持await异步操作
private async void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 0)
    {
        string newvalue = Search_Product.Text.ToString();
        // using自动释放连接资源,不用手动Close
        using (SqlConnection con = new SqlConnection("替换成你的数据库连接字符串"))
        {
            try
            {
                // 异步打开连接,不阻塞UI线程
                await con.OpenAsync();
                // 替换成你的实际表名和查询条件列
                string query = "SELECT Product_Code,Rate,SalePrice,CGST,SGST FROM YourTableName WHERE YourConditionColumn = @newvalue";
                
                SqlDataAdapter da = new SqlDataAdapter(query, con);
                // 添加参数,避免SQL注入和格式错误
                da.SelectCommand.Parameters.AddWithValue("@newvalue", newvalue);
                
                DataTable dt = new DataTable();
                // 把填充DataTable的耗时操作放到后台线程
                await Task.Run(() => da.Fill(dt));
                
                // await后自动回到UI线程,直接绑定数据即可
                dataGridView1.DataSource = dt;
            }
            catch (Exception ex)
            {
                // 捕获异常,给用户友好提示
                MessageBox.Show($"查询出错:{ex.Message}");
            }
        }
    }
}

额外提醒:

  • 如果查询返回的数据量很大,da.Fill(dt)也会耗时,所以用Task.Run()把这部分也放到后台线程,进一步避免UI阻塞。
  • 记得把代码里的YourTableName、YourConditionColumn和数据库连接字符串替换成你实际的内容。
  • 永远不要在UI线程里执行I/O操作(数据库、文件读写、网络请求等),这类耗时操作必须放到后台线程处理。

这样修改后,点击查询时UI不会卡顿,用户还能正常操作界面,直到查询完成后自动更新DataGridView~

内容的提问来源于stack exchange,提问作者Rushabh Y Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:30:37