【发布时间】:2018-04-13 20:04:49
【问题描述】:
说到 C#,我正处于学习阶段。
我有一个选中的列表框。因此,如果检查了一个项目,我希望它对数据库进行查询。如果没有检查,它应该只查询 select * from Table。
这是我到目前为止所做的,但我失败了。有什么建议可以让它正常工作吗?
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();
}
}
【问题讨论】:
-
在调用之前检查查询变量是否为空或空。删除` if (!string.IsNullorEmpty(query)) query = query.Remove(query.Length -3);`
-
如果您的
chkbx.CheckedItems看起来没有任何检查,将会出现问题。您的下一行代码正在尝试从空字符串中删除内容。如果没有项目,这将引发错误...query = query.Remove(query.Length -3)因为长度将为 0,因此您将删除 -3 项目
标签: c# null checkedlistbox