如何同时运行两个或多个SQL查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何同时运行两个或多个SQL查询?相关的知识,希望对你有一定的参考价值。

我想在不同的线程中同时运行更多查询。我正在使用backgroundworkers来解决这个问题!我的问题是:是否有更好的方式委派UI元素或者它是否正确,因为我这样做?

    private void mainform_Load(object sender, EventArgs e)
    {


        if (bscan_backgroundworker.IsBusy == false)
        {
            bscan_backgroundworker.RunWorkerAsync();
        }

    if (bscan2_backgroundworker.IsBusy == false)
        {
            bscan2_backgroundworker.RunWorkerAsync();
        }

    }

    private void bscan_backgroundworker_DoWork(object sender, DoWorkEventArgs e)
    {
        bscan();

    }

    private void bscan2_backgroundworker_DoWork(object sender, DoWorkEventArgs e)
    {
        bscan2();

    }

    private void bscan()
    {  

     string query = "Select * from table_name";
     mysqlConnection mysqlconn_to_db = new MySqlConnection(connectionstring);
        try
        {
            mysqlconn_to_db.Open();
            using (MySqlCommand command = new MySqlCommand(query, mysqlconn_to_db))
            {
                command.ExecuteNonQuery();

                using (MySqlDataAdapter adapter = new MySqlDataAdapter(command))
                {
                    DataTable datatable = new DataTable();
                    adapter.Fill(datatable);


                    if (this.InvokeRequired)
                    {
                        this.Invoke(new MethodInvoker(delegate ()
                        {
                            dataGridView1.DataSource = datatable;
                            dataGridView1.Refresh();
                            label2.Text = dataGridView1.Rows[Convert.ToInt16(label1.Text)].Cells[0].Value.ToString();
                        }));
                    }
                    else
                    {
                        dataGridView1.DataSource = datatable;
                        dataGridView1.Refresh();                           
                        label2.Text = dataGridView1.Rows[Convert.ToInt16(label1.Text)].Cells[0].Value.ToString();
                    }


                adapter.Dispose();
                }

            }
        }
        catch (Exception ex)
        {
            messagebox(ex.Message);
        }


    }

bscan2()方法与具有不同查询和不同datagridview的bscan()几乎相同。有没有更有效的方法来做到这一点,还是没问题?

答案

你的BackgroundWorker解决方案不一定是坏的,但有一些新的和改进的方法来处理C#中的异步编程。强烈建议您查看async and await。这可能不会直接适用于你在这种情况下想要完成的事情,因为你似乎不想等待一个方法完成,所以你也建议你查看Task Parallel Library (TPL),特别是Task.Run()。甚至还有一种名为Parallel LINQ的东西,专门用于处理异步查询。

以上是关于如何同时运行两个或多个SQL查询?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 多个视图或运行时片段替换​​?

如何在sql中打印多个数据

如何运行多个 SQL 查询?

sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li

尝试使用DBeaver同时执行多个查询时,无法与Ignite群集通信

sql语句如何查询一个表中某两个字段的相同数据?