当前位置:  开发笔记 > 编程语言 > 正文

检索满足所选条件的数据的最佳实践

如何解决《检索满足所选条件的数据的最佳实践》经验,为你挑选了1个好方法。

我有一个名为call的数据库表,其中包含call_time,location,emergency_type列,还有三种类型的紧急情况:护理人员,警察和消防员.在Windows窗体中,我创建了CheckBoxes的"医护人员","警察","消防员",我想检索满足用户选择的所有表格列.

我创建了一个函数:

public static DataTable GetHistory(DateTime from, DateTime to, bool paramedics, bool police, bool firefighters)
    {
        string select =
            "SELECT call_time, location, emergency_type where call_time between @from AND @to AND";
        if(paramedics)
        {
            select += " emergency_type = 'paramedics' ";
        }
        if(paramedics && police)
        {
           select +=" emergency_type = 'paramedics' OR emergency_type = 'police';
        }
        ...

    }

然而这个代码看起来很脏,因为如果有30种紧急情况就会有30个!组合,我会在写所有if语句之前变老.

如果您有很多选项可以选择,如果您分享了检索符合所选搜索条件的数据的练习,我将不胜感激.

谢谢!



1> TheCodeJunki..:

好吧,如果你必须使用emergency_type作为字符串,那么你可以发送一个包含紧急类型的文本表示的List,而不是传入bool.例如,要调整上面的代码,您可以将方法签名更改为

public static DataTable GetHistory(DateTime from, DateTime to, List types)
{
 ..
}

然后传入一个看起来像这样的列表(例如)

List types = 
  new List { "paramedics" };

or 

List types = 
  new List { "paramedics", "police" };

然后,您可以调整查询以在where子句中使用SQL IN语句.接下来将字符串列表转换为逗号分隔的字符串

string values = "'paramedics', 'police'"

创建values变量的一种简单方法是使用

string values = string.Empty;
            types.ForEach(s =>
            {
               if (!string.IsNullOrEmpty(values))
                   values += ",";
               values += string.Format("'{0}'", s);

            });

顺便说一下,您可以使用参数化命令来避免SQL注入.一旦你有了字符串,你就可以做到

string select =
 "SELECT call_time, location, emergency_type where call_time between @from AND @to AND emergency_type IN " + values

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有