Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从内部DoWork()从MySQL数据库获取信息_C#_.net_Mysql_Winforms_Listview - Fatal编程技术网

C# 无法从内部DoWork()从MySQL数据库获取信息

C# 无法从内部DoWork()从MySQL数据库获取信息,c#,.net,mysql,winforms,listview,C#,.net,Mysql,Winforms,Listview,我使用的是后台工作程序,我在backgroundworker类之外测试了这个MySQL/C select查询,它工作得非常好。但是当我尝试使用backgroundworker时,所有的字符串值在它的末尾都是空的 void bWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (action != Action.ViewOrder) {

我使用的是后台工作程序,我在backgroundworker类之外测试了这个MySQL/C select查询,它工作得非常好。但是当我尝试使用backgroundworker时,所有的字符串值在它的末尾都是空的

    void bWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        if (action != Action.ViewOrder)
        {
            if (HasErrors != null || HasErrors != "" || HasErrors != String.Empty)
            {
                Alert(HasErrors,
                    "Retry",
                    Error,
                    true,
                    Color.FromArgb(249, 87, 55)
                );
            }
            else
            {
                var found = false;

                foreach (var item in thelist.Items)
                {
                    if (item.ToString().Contains(OrderNumber))
                        found = true;
                }
                if (thelist.Items.Count == 0)
                {
                    ListViewItem LItem = new ListViewItem(OrderNumber);
                    ListViewItem.ListViewSubItemCollection SubItems = new ListViewItem.ListViewSubItemCollection(LItem);

                    SubItems.Add(FirstName + " " + LastName);
                    SubItems.Add(EmailAddress);
                    SubItems.Add(DeliveryAddress);
                    SubItems.Add(Company);
                    SubItems.Add(PhoneNumber);

                    thelist.Items.Add(LItem);
                    thelist.Update();
                }
            }
        }
    }

    void bWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        SlideTimer.Enabled = true;
        Alert("All unconfirmed orders have been retrieved.",
            "Dismiss",
            Information,
            true,
            Color.FromArgb(63, 187, 249)
        );
        action = Action.None;
    }


    void bWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; (i <= 10); i++)
        {
            if (bWorker.CancellationPending == true)
            {
                e.Cancel = true;
            }
            else
            {
                if (action == Action.ViewOrder)
                {
                    // Connect to Database, check for orders, and end.
                            string cs = "server=" +
                                Settings.Default.Server +
                                ";username=" +
                                Settings.Default.Username +
                                ";database=" +
                                Settings.Default.Database +
                                ";port=3306;password=BLAH" +
                            ";";
                    MySql.Data.MySqlClient.MySqlConnection msc = new MySql.Data.MySqlClient.MySqlConnection(cs);
                    try
                    {
                        msc.Open();

                        // Check for new orders.
                        string st = "SELECT sessionid, firstname, lastname, email, streetaddress, suburb, postcode, state, company, phone FROM mysql_9269_dbase.order";
                        MySql.Data.MySqlClient.MySqlCommand cd = new MySql.Data.MySqlClient.MySqlCommand(st, msc);
                        MySql.Data.MySqlClient.MySqlDataReader msdr = cd.ExecuteReader();

                        while (msdr.Read())
                        {
                            OrderNumber = msdr[0].ToString();
                            FirstName = msdr[1].ToString();
                            LastName = msdr[2].ToString();
                            EmailAddress = msdr[3].ToString();
                            DeliveryAddress = msdr[4].ToString() + " " + msdr[5].ToString() + " " + msdr[6].ToString() + " " + msdr[7];
                            Company = msdr[8].ToString();
                            PhoneNumber = msdr[9].ToString();


                           // System.Threading.Thread.Sleep(500);
                            bWorker.ReportProgress((i * 10));
                        }

                        msc.Close();
                    }
                    catch (Exception en)
                    {
                        HasErrors = en.Message;
                    }

                }
            }
        }
    }
我知道表中有信息,我也知道mysql查询没有问题,因为如果我不使用backgroundworker,它就可以工作


为什么BackgroundWorker不能使用它?

我发现有两个主要问题会阻止您的列表被更新。第一个是bWorker_ProgressChanged中HasErrors字符串上的if语句。当您将这些条件组合在一起时,您可能会说iftrue,因为每个字符串都不是null,也不是空的。我认为你可以通过以下方式实现你的目标:

if(!string.IsNullOrEmpty(HasErrors))
另一个问题是,只有在函数第一次运行时,列表才会为空。您需要将if thelist.Items.Count==0更改为if!找到了