C# 复选框列表如果mysql中的状态为true,则必须检查名称

C# 复选框列表如果mysql中的状态为true,则必须检查名称,c#,mysql,visual-studio,checklistbox,C#,Mysql,Visual Studio,Checklistbox,我有两列,一列是checkStatus,另一列是EmployeeName 我已经得到了所有的名字,但我不知道如何得到checkStatus如果状态为真,那么它必须被检查,如果不是,它就不检查 string Query = "Select Distinct EmployeeName From tblschedule Where ScheduleFrom BETWEEN '"+clsSQLcon.DateFrom1+"' AND '"+ cl

我有两列,一列是checkStatus,另一列是EmployeeName

我已经得到了所有的名字,但我不知道如何得到checkStatus如果状态为真,那么它必须被检查,如果不是,它就不检查

        string Query = "Select Distinct EmployeeName  From tblschedule Where ScheduleFrom BETWEEN '"+clsSQLcon.DateFrom1+"' AND '"+ clsSQLcon.DateTo1 + "' "; ;
  
        using (MySqlCommand cmd  = new MySqlCommand(Query, conn))
        {
            try
            {
                conn.Open();
                
                using (MySqlDataReader myReader = cmd.ExecuteReader())
                {
                    while (myReader.Read())
                    {
                        string employeeName = (myReader.IsDBNull(myReader.GetOrdinal("EmployeeName")) ?
                                            string.Empty : myReader["EmployeeName"].ToString());
                        checkedListBox1.Items.Add(employeeName);
                    }

                }

            }

这是我获取名称的代码。

根据您所描述的内容,您只需修改查询以包含状态?
    string Query = "Select Distinct EmployeeName,checkStatus From tblschedule Where ScheduleFrom 
    BETWEEN '"+clsSQLcon.DateFrom1+"' AND '"+ clsSQLcon.DateTo1 + "' "; ;
  
        using (MySqlCommand cmd  = new MySqlCommand(Query, conn))
        {
            try
            {
                conn.Open();
                
                using (MySqlDataReader myReader = cmd.ExecuteReader())
                {
                    while (myReader.Read())
                    {
                        string employeeName = (myReader.IsDBNull(myReader.GetOrdinal("EmployeeName")) ?
                                            string.Empty : myReader["EmployeeName"].ToString());
    string checkStatus= (myReader.IsDBNull(myReader.GetOrdinal("checkStatus")) ?
                                            string.Empty : myReader["checkStatus"].ToString());
                        checkedListBox1.Items.Add(employeeName);
    if(checkStatus=="true")
      { checkedListBox1.SetItemChecked(checkedListBox1.Items.Count-1, true);   
}         
                    }

                }

            }
您可能还应该参数化查询。
查询的外观示例如下:

       string Query = "SELECT EmployeeName, checkStatus FROM tblschedule WHERE ScheduleFrom BETWEEN @StartDate AND @EndDate ";

        using (MySqlCommand cmd = new MySqlCommand(Query, conn))
        {
            cmd.Parameters.AddWithValue("@StartDate", (MySqlDbType.DateTime)clsSQLcon.DateFrom1);
            cmd.Parameters.AddWithValue("@EndDate", (MySqlDbType.DateTime)clsSQLcon.DateTo1);
            conn.Open();
         try{
            using (MySqlDataReader myReader = cmd.ExecuteReader())
            {
                while (myReader.Read())
                {
                    string employeeName = myReader.IsDBNull(0) ? string.Empty : myReader.GetString(0);
                    bool cstatus = myReader.GetBoolean(1);
                    //do something with name and status and check distinct names in code instead
                }
            }
            }
          catch(MySqlException){//Exception handling}
        }
如果您只需要不同的名称,您可以在查询中添加一个“GroupBy(EmployeeName)”,但如果在提供的时间范围内有多个条目,您只会得到一个随机条目。

@jon Candare。 你可以参考我的代码。我在数据库中将checkStatus设置为BIT type。将checkStatus添加到查询语句中,并在读取数据时读取checkStatus。然后做出判断并设置checkedListBox1的SetItemChecked

我的cs代码如下:

private void Form1_Load(object sender, EventArgs e)
        {
            string constr = @"Connstr";
            MySqlConnection con = new MySqlConnection(constr);
              string query = " Select Distinct EmployeeName,checkStatus From tblschedule Where ScheduleFrom BETWEEN '"+clsSQLcon.DateFrom1+"' AND '"+ clsSQLcon.DateTo1 + "' " ";
            con.Open();
            using (MySqlCommand cmd = new MySqlCommand(query, con))
            {
                try
                {
                    using (MySqlDataReader myReader = cmd.ExecuteReader())
                    {
                        while (myReader.Read())
                        {
                            string employeeName = (myReader.IsDBNull(myReader.GetOrdinal("EmployeeName")) ?
                                             string.Empty : myReader["EmployeeName"].ToString());
                            string checkStatus = (myReader.IsDBNull(myReader.GetOrdinal("checkStatus")) ?
                                            string.Empty : myReader["checkStatus"].ToString());
                            checkedListBox1.Items.Add(employeeName);
                            if (checkStatus == "True")
                            {
                                checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, true);
                            }
                            if (checkStatus == "False")
                            {
                                checkedListBox1.SetItemChecked(checkedListBox1.Items.Count - 1, false);
                            }
                        }
                    }
                }
                Catch(MySqlException)
                {
                }
            }
        }
结果如图所示: