You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何避免多if语句,通过ComboBox选月份过滤MySQL数据

优化C#中ComboBox月份筛选MySQL数据的代码

你当前的实现需要为每个月份编写重复的if分支,不仅冗余还难以维护,以下是几种简洁的优化方案:

1. 单月份筛选:动态参数化查询(推荐)

直接利用ComboBox的选中文本构建参数化查询,无需编写多个if分支,同时避免SQL注入风险:

// 获取ComboBox选中的月份文本
string selectedMonth = combox.Text.Trim();

// 构建参数化查询(注意:MySQL需使用MySqlDataAdapter而非SqlDataAdapter)
string query = "SELECT * FROM mytable WHERE Month LIKE CONCAT('%', @MonthName)";

using (MySqlDataAdapter sda = new MySqlDataAdapter(query, con))
{
    // 添加参数,防止SQL注入
    sda.SelectCommand.Parameters.AddWithValue("@MonthName", selectedMonth);
    
    DataSet dataSet = new DataSet();
    sda.Fill(dataSet);
    // 绑定到DataGridView时指定具体表,避免DataSet多表问题
    table.DataSource = dataSet.Tables[0];
}

2. 多月份筛选:动态拼接参数化条件

如果ComboBox支持多选(设置SelectionMode为MultiSimple或MultiExtended),可以自动拼接OR条件,无需硬编码月份:

// 获取所有选中的月份
var selectedMonths = combox.SelectedItems.Cast<string>().ToList();

// 无选中项时显示全部数据
if (selectedMonths.Count == 0)
{
    string query = "SELECT * FROM mytable";
    using (MySqlDataAdapter sda = new MySqlDataAdapter(query, con))
    {
        DataSet dataSet = new DataSet();
        sda.Fill(dataSet);
        table.DataSource = dataSet.Tables[0];
    }
    return;
}

// 构建参数化条件集合
var paramList = new List<MySqlParameter>();
var conditionList = new List<string>();

for (int i = 0; i < selectedMonths.Count; i++)
{
    string paramName = $"@Month{i}";
    conditionList.Add($"Month LIKE CONCAT('%', {paramName})");
    paramList.Add(new MySqlParameter(paramName, selectedMonths[i]));
}

// 拼接最终查询语句
string query = $"SELECT * FROM mytable WHERE {string.Join(" OR ", conditionList)}";

using (MySqlDataAdapter sda = new MySqlDataAdapter(query, con))
{
    sda.SelectCommand.Parameters.AddRange(paramList.ToArray());
    DataSet dataSet = new DataSet();
    sda.Fill(dataSet);
    table.DataSource = dataSet.Tables[0];
}

额外优化建议

  • 绑定月份列表到ComboBox:提前定义月份列表并绑定,避免手动输入的拼写错误:
    var monthList = new List<string> 
    { 
        "January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"
    };
    combox.DataSource = monthList;
    
  • 使用using语句管理资源:确保数据库连接、DataAdapter等对象自动释放,避免资源泄漏。
  • 替换SQL Server类库:连接MySQL时务必使用MySql.Data.MySqlClient命名空间下的类,不要误用SQL Server的SqlDataAdapter。

内容的提问来源于stack exchange,提问作者echooooslam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:05:26