0

我正在使用 sql server 2012 和 Visual Studio 2010,到目前为止我拥有的是数据库中的一个表和一个小型 c# 应用程序,它将员工加载到datagridview

但是我想做的是只选择职位为“服务员”的员工

到目前为止,我已经编写了有关添加记录、编辑删除和显示整个数据的查询。

到目前为止,我已经设法仅通过读取指定的列来显示名称:

      private void LoadEmpName()
      {
            sc.Close();
            try
            {
                sc.Open();
                cmd.CommandText = "select * from myEmployees";
                dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {

                        lstNames.Items.Add(dr[1].ToString());
                    }
                }
                sc.Close();

            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

是否可以更改我现有的代码,以便仅显示列为“服务员”的员工(仅限名字),还是我必须编写一个完全不同的查询?

4

5 回答 5

2

如果您有一个名为“JobTitle”的列,那么您的查询将变为:

"select * from myEmployees where JobTitle like '%waiter%'";

“like”是比较运算符,“%”是任意数量的字符的通配符。

如果您想查询不同的事物,可以采用多种方法。最简单的方法是简单地创建一个在查询字符串中包含部分时间测试的新方法:

"select * from myEmployees where PartTime = 1";

但是,对于用户可以执行的每个可能的搜索,您都需要一个新的查询,这将变得低效维护。

当您填充数据网格时,您应该查看在客户端中进行过滤。您带来所有数据(如果您有大量数据,则使用分页),然后让用户通过指定自己的过滤器来决定他们有兴趣查看的信息。

于 2013-03-07T21:34:21.933 回答
2

where您应该在 SQL 查询中添加一个子句。我不知道您的数据库结构,但类似;

cmd.CommandText = "select * from myEmployees where title='waiter'";

在 SQL 中而不是在 C# 中进行过滤效率更高。

于 2013-03-07T21:34:31.053 回答
1
select * from myEmployees where jobtitle='Waiter'
于 2013-03-07T21:34:33.197 回答
1

Discalimer:OP 询问“是否可以更改我现有的代码,以便只显示被列为‘服务员’的员工(仅限名字),还是我必须编写一个完全不同的查询?”

因此,纯粹是为了回答您“不必”使用新查询。您可以在添加之前放置一个 if(假设您的第二列是“职位”):

                while (dr.Read())
                {
                    if(dr[2].ToString().EqualsIgnoreCase("Waiter")){
                        lstNames.Items.Add(dr[1].ToString());
                    }
                }

虽然我不会推荐它。

于 2013-03-07T21:36:51.150 回答
1

您将不得不更改查询。这是更好的方法。 我喜欢@CrisF 解决方案。只是除了它。

    private void LoadEmpName()
    {

        try
        {
            sc.Open();
            //it will return all employees containing word waiter in Column JobTitle.
            cmd.CommandText = "select * from myEmployees where JobTitle like '%waiter%' ";

            dr = cmd.ExecuteReader();
            while (dr.Read())
            {
               lstNames.Items.Add(dr[1].ToString());
            }

        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
        finally
        {
           sc.Close();
        }
    }
于 2013-03-07T21:57:00.723 回答