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