Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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# Startindex不能小于零。参数名称:startindex_C#_Null_Checkedlistbox - Fatal编程技术网

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

C# Startindex不能小于零。参数名称:startindex,c#,null,checkedlistbox,C#,Null,Checkedlistbox,说到C,我正处于学习阶段 我有一个复选框。所以,若一个项目被选中,我希望它对数据库进行查询。若未选中任何内容,则只应从表中查询select* 到目前为止,我已经做到了这一点,但我正在努力失败。有什么建议可以让它正常工作吗 private void chkbx_SelectedIndexChanged(object sender, EventArgs e) { try { string query = string.Empty;

说到C,我正处于学习阶段

我有一个复选框。所以,若一个项目被选中,我希望它对数据库进行查询。若未选中任何内容,则只应从表中查询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();
        }
    }

您可以使用

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子句的内部部分。子句已完成,在联接结果之前和之后添加一个单引号

在调用前检查查询变量是否为null或空。删除`if!string.IsNullorEmptyquery=query.Removequery.Length-3`如果没有检查任何内容,则您的chkbx.CheckedItems将出现问题。下一行代码将尝试从空字符串中删除内容。如果没有项目,这将引发错误。。。query=query.Removequery.Length-3,因为长度将为0,所以您将删除-3项在生成where子句时缺少了一些引号。很抱歉,我没有看到任何缺少的引号。你能指出它吗?也许highlightning的语法有误导性?实际上你有太多了。我以为你在嵌入一个双人床,但实际上你并不需要它们。query=其中代理位于{'+string.Join',',items+'};这将产生类似于{'a','b','c'}中的WHERE代理再次检查的结果。它甚至没有在这个网站上进行身份验证。