Startindex不能小于零。参数名称:startindex

时间:2018-04-13 20:04:50

标签: c# null checkedlistbox

我在C#的学习阶段。

我有一个checkedlistbox。因此,如果检查项目,我希望它对数据库进行查询。如果没有选中任何内容,则只应从表中查询select *。

这是我到目前为止所做的事情,但我很努力。有什么建议我怎么能让它正常工作?

private void chkbx_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {


            string query = string.Empty;
            string req = "Select * FROM SME";
            string sql = string.Empty;
            foreach (string s in chkbx.CheckedItems)
                query += s + "','";
            query = query.Remove(query.Length -3);
            if (!string.IsNullOrEmpty(query))
            {
                query = string.Format(" WHERE Agent IN ('{0}')", query);
            }


            {
                using (MySqlConnection con = new MySqlConnection("datasource=server.ip.com;port=12345;database=DB;username=user;password=pass"))
                {

                    using (MySqlCommand cmd = new MySqlCommand(req + query))
                    {
                        using (MySqlDataAdapter sda = new MySqlDataAdapter(cmd))
                        {
                            cmd.Connection = con;
                            using (DataTable dt = new DataTable())
                            {
                                sda.Fill(dt);
                                dataGrid.DataSource = dt;

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

1 个答案:

答案 0 :(得分:1)

您可以使用

代替使用连接字符串
string query = "";
List<string> items = new List<string>();
foreach (string s in chkbx.CheckedItems)
    items.Add(s);
if (items.Count > 0)
{
    query = $" WHERE Agent IN ('{string.Join("','", items)}')";
}

通过这种方式,您可以在列表中添加选中的项目文本,然后使用string.Join构建IN子句的内部部分。该子句在连接结果之前和之后添加单引号完成