我正在使用sql server 2012和visual studio 2010,到目前为止我所拥有的是数据库中的单个表和一个将员工加载到datagridview
但我想做的只是选择职称为“Waiter”的员工
到目前为止,我已经编写了关于添加记录编辑删除和显示整个数据的查询。
到目前为止,我只是通过读取指定的列来设法显示名称:
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());
}
}
是否可以更改现有代码,以便只显示列为“Waiter”的员工(仅限名字)或者我必须编写完全不同的查询?
答案 0 :(得分:2)
如果您有一个名为“JobTitle”的列,那么您的查询将变为:
"select * from myEmployees where JobTitle like '%waiter%'";
“like”是比较运算符,“%”是任意数量字符的通配符。
如果您想要查询不同的内容,可以采用多种方法。最简单的方法是简单地创建一个在查询字符串中具有兼职测试的新方法:
"select * from myEmployees where PartTime = 1";
但是,对于用户可能进行的每次搜索,您都需要一个新的查询,这样维护效率会很低。
在填充数据网格时,您应该考虑在客户端中进行过滤。您带来所有数据(如果您有大量数据,则使用分页),然后让用户通过指定自己的过滤器来决定他们感兴趣的信息。
答案 1 :(得分:2)
您应该在SQL查询中添加where
子句。我不知道你的数据库结构,但是像;
cmd.CommandText = "select * from myEmployees where title='waiter'";
在SQL中而不是在C#中进行过滤效率要高得多。
答案 2 :(得分:1)
select * from myEmployees where jobtitle='Waiter'
答案 3 :(得分:1)
Discalimer:OP询问“是否可以更改现有代码,以便只显示列为'Waiter'的员工(仅限名字)或者我必须编写完全不同的查询?”
纯粹回答你没有“使用”新查询。您可以在添加之前放置一个if(假设您的第二列是'职称'):
while (dr.Read())
{
if(dr[2].ToString().EqualsIgnoreCase("Waiter")){
lstNames.Items.Add(dr[1].ToString());
}
}
虽然我不推荐它。
答案 4 :(得分: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();
}
}