峰峦@叠嶂 2024-08-24 15:56 采纳率: 97.6%
浏览 4
已结题

因录入内容长,导致的查询卡顿或查询不到的问题

请问大家,我在textchange事件中,针对复制、粘贴与录入的内容,对数据表进行查询,代码如下,但由于录入内容有时会很长,我想采用回车一下,再启动查询的方式,以避免因还没录完,就频繁查询所导致的查询不到或性能卡顿的问题,请问怎么实现;

img

private async void txtCode20_TextChanged(object sender, EventArgs e)
{
    string connectionString = "server=192.168.4.200;database=BCM30_DrugAdmin;user=sa;password=sskyadmin1!";

    string query = @"SELECT code20, batchNo, parentCode2, orderCode, customerName, orderType, createTime, updateTime 
                    FROM (

                    SELECT dr.code20 as code20 ,dr.batchNo as batchNo, dr.parentCode2 as parentCode2, wo.orderCode as orderCode ,wd.customerName as customerName,wd.orderType as orderType,wo.createTime as createTime,wo.updateTime as updateTime FROM  dbo.da_codeRelation_193815500501 dr
                    JOIN dbo.da_warehouseOutCode wo ON dr.parentCode2 = wo.code20 
                    JOIN dbo.bcm_warehouseOrder wd on  wo.orderCode = wd.orderCode 
                    WHERE dr.code20 = @Code20 --心可舒96union

                    SELECT dr.code20 as code20 ,dr.batchNo as batchNo, dr.parentCode2 as parentCode2, wo.orderCode as orderCode,wd.customerName as customerName,wd.orderType as orderType ,wo.createTime as createTime ,wo.updateTime as updateTime FROM  dbo.da_codeRelation_193815500202 dr
                    JOIN dbo.da_warehouseOutCode wo ON dr.parentCode3 = wo.code20 
                    JOIN dbo.bcm_warehouseOrder wd on  wo.orderCode = wd.orderCode 
                    WHERE dr.code20 = @Code20 --心可舒48union

                    SELECT dr.code20 as code20 ,dr.batchNo as batchNo, dr.parentCode2 as parentCode2, wo.orderCode as orderCode,wd.customerName as customerName,wd.orderType as orderType ,wo.createTime as createTime ,wo.updateTime as updateTime FROM  dbo.da_codeRelation_193815500402 dr
                    JOIN dbo.da_warehouseOutCode wo ON dr.parentCode3 = wo.code20 
                    JOIN dbo.bcm_warehouseOrder wd on  wo.orderCode = wd.orderCode 
                    WHERE dr.code20 = @Code20 --心可舒72union

                    SELECT dr.code20 as code20 ,dr.batchNo as batchNo , dr.parentCode2 as parentCode2, wo.orderCode as orderCode,wd.customerName as customerName,wd.orderType as orderType , wo.createTime as createTime,wo.updateTime as updateTime FROM  dbo.da_codeRelation_191925600201 dr
                    JOIN dbo.da_warehouseOutCode wo ON dr.parentCode2 = wo.code20 
                    JOIN dbo.bcm_warehouseOrder wd on  wo.orderCode = wd.orderCode 
                    WHERE dr.code20 = @Code20 --心可舒胶囊24union

                    SELECT dr.code20 as code20 ,dr.batchNo as batchNo , dr.parentCode2 as parentCode2 , wo.orderCode as orderCode,wd.customerName as customerName,wd.orderType as orderType ,wo.createTime as createTime,wo.updateTime as updateTime FROM  dbo.da_codeRelation_193815500302 dr
                    JOIN dbo.da_warehouseOutCode wo ON dr.parentCode3 = wo.code20 
                    JOIN dbo.bcm_warehouseOrder wd on  wo.orderCode = wd.orderCode 

                    WHERE dr.code20 = @Code20) as subquery"; //心可舒异形片0.62

    try
    {
        
        using (SqlConnection Conn = new SqlConnection(connectionString))
        {
            await Conn.OpenAsync();
         
            DataTable sumdt = new DataTable();

            string Code20 = txtCode20.Text;

            using (SqlCommand Cmd = new SqlCommand(query, Conn))
            {
                Cmd.Parameters.AddWithValue("@Code20", Code20);

                using (SqlDataAdapter sda = new SqlDataAdapter(Cmd))
                {
                    await Task.Run(() => sda.Fill(sumdt));
                }                        

                dataGridView1.DataSource = sumdt;

            }  
         
        }
    }

    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
   
}


  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-24 15:57
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要实现在输入内容后按下回车键再进行查询,可以在txtCode20_TextChanged事件中添加一个条件判断,只有当文本框的内容发生变化且最后一个字符为回车符时才执行查询。首先,需要在类的成员变量中添加一个布尔变量isEnterPressed来记录是否按下了回车键。然后,在txtCode20_TextChanged事件中检查最后一个字符是否为回车符,如果是,则将isEnterPressed设置为true,否则设置为false。最后,在执行查询之前检查isEnterPressed的值,如果为true,则执行查询并将isEnterPressed重置为false

    以下是修改后的代码:

    private bool isEnterPressed = false;
    
    private async void txtCode20_TextChanged(object sender, EventArgs e)
    {
        // 检查最后一个字符是否为回车符
        if (txtCode20.Text.Length > 0 && txtCode20.Text[txtCode20.Text.Length - 1] == '\r')
        {
            isEnterPressed = true;
            txtCode20.Text = txtCode20.Text.TrimEnd('\r'); // 移除回车符
        }
        else
        {
            isEnterPressed = false;
        }
    
        // 如果按下了回车键,执行查询
        if (isEnterPressed)
        {
            // 原有的查询代码...
        }
    }
    

    这样,只有在按下回车键后,才会执行查询操作,避免了频繁查询导致的性能问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月24日

悬赏问题

  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?
  • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题
  • ¥100 无网格伽辽金方法研究裂纹扩展的程序