Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用SQL Server在C中循环值_C#_Sql Server - Fatal编程技术网

C# 如何使用SQL Server在C中循环值

C# 如何使用SQL Server在C中循环值,c#,sql-server,C#,Sql Server,我想做的是在我的comboSubDep中添加项目,在其中比较老师所学的科目。例如:如果我选择数学作为我的科目,那么只有该科目的教师才会出现。但我不想直接把它和一个特定的主题进行比较。我只想让它循环到数据库中的每一个主题。主体不是恒定不变的 con.Open(); cmd = new SqlCommand("SELECT Emp_FName, Emp_LName, T_Subject FROM Employee WHERE Emp_Position = 'Teacher'", con); rdr

我想做的是在我的comboSubDep中添加项目,在其中比较老师所学的科目。例如:如果我选择数学作为我的科目,那么只有该科目的教师才会出现。但我不想直接把它和一个特定的主题进行比较。我只想让它循环到数据库中的每一个主题。主体不是恒定不变的

con.Open();
cmd = new SqlCommand("SELECT Emp_FName, Emp_LName, T_Subject FROM Employee WHERE Emp_Position = 'Teacher'", con);
rdr = cmd.ExecuteReader();

while (rdr.Read())
{
    string sub = rdr["T_Subject"].ToString();
    string fname = rdr["Emp_FName"].ToString();
    string lname = rdr["Emp_LName"].ToString();
    string fulname = fname + ' ' + lname;

    if (ComboSubDep.Text != sub)
    {
        txtTeacher.Text = "";
        txtTeacher.Items.Clear();
    } 
    else
    {
        txtTeacher.Text = "";
        txtTeacher.Items.Clear();
        txtTeacher.Items.Add(fulname);
    }
}

rdr.Close();
con.Close(); 

您的代码非常混乱。你得到你的阅读器,然后循环每一行。对于每一行,您可以:

获取列内容 如果老师的科目不是你想要的 清除TXT教师的所有项目-所有项目! 否则,如果老师的科目是你想要的 清除TXT文件中的所有项目 将当前项作为新项添加到txtTeacher 第一点:我假设txtTeacher是一个组合框。通常,当人们给出变量名类型前缀时,txt前缀会向文本框发出信号:这会使代码看起来很复杂,不太受支持cbo'是组合框中更常见的前缀。但是,这不会停止代码的工作

这是什么意思。假设你一共有4位老师。第一个主题不在正确的主题中,因此请清除组合框。第二个是清除组合并添加教师。第三个也是,因此您清除组合,去掉第二个并添加第三个教师。第四个不是,所以你清除组合

在处理结束时,您有一个空的组合框。你知道为什么吗?这很简单,但代码应该如下所示:

con.Open();
cmd = new SqlCommand("SELECT Emp_FName,Emp_LName,T_Subject from Employee where Emp_Position = 'Teacher'", con);
rdr = cmd.ExecuteReader();

txtTeacher.Items.Clear;
    while (rdr.Read())
    {
        string sub = rdr["T_Subject"].ToString();
        string fname = rdr["Emp_FName"].ToString();
        string lname = rdr["Emp_LName"].ToString();
        string fulname = fname + ' ' + lname;

    if (ComboSubDep.Text == sub)
    {
        txtTeacher.Items.Add(fulname);
    }
}

您可以通过使用调试器逐行遍历代码来捕获此类内容。这应该会告诉您为什么会发生这种情况。

您的代码非常混乱。你得到你的阅读器,然后循环每一行。对于每一行,您可以:

获取列内容 如果老师的科目不是你想要的 清除TXT教师的所有项目-所有项目! 否则,如果老师的科目是你想要的 清除TXT文件中的所有项目 将当前项作为新项添加到txtTeacher 第一点:我假设txtTeacher是一个组合框。通常,当人们给出变量名类型前缀时,txt前缀会向文本框发出信号:这会使代码看起来很复杂,不太受支持cbo'是组合框中更常见的前缀。但是,这不会停止代码的工作

这是什么意思。假设你一共有4位老师。第一个主题不在正确的主题中,因此请清除组合框。第二个是清除组合并添加教师。第三个也是,因此您清除组合,去掉第二个并添加第三个教师。第四个不是,所以你清除组合

在处理结束时,您有一个空的组合框。你知道为什么吗?这很简单,但代码应该如下所示:

con.Open();
cmd = new SqlCommand("SELECT Emp_FName,Emp_LName,T_Subject from Employee where Emp_Position = 'Teacher'", con);
rdr = cmd.ExecuteReader();

txtTeacher.Items.Clear;
    while (rdr.Read())
    {
        string sub = rdr["T_Subject"].ToString();
        string fname = rdr["Emp_FName"].ToString();
        string lname = rdr["Emp_LName"].ToString();
        string fulname = fname + ' ' + lname;

    if (ComboSubDep.Text == sub)
    {
        txtTeacher.Items.Add(fulname);
    }
}

您可以通过使用调试器逐行遍历代码来捕获此类内容。这应该会告诉你为什么会发生这种情况。

不确定你想完成什么,但如果我正确理解你,你可以做到这一点

    txtTeacher.Items.Clear();
    while (rdr.Read())
   {
       string sub = rdr["T_Subject"].ToString();
       string fname = rdr["Emp_FName"].ToString();
       string lname = rdr["Emp_LName"].ToString();
       string fulname = fname + ' ' + lname;

    if(sub=="Math")
    {

        txtTeacher.Items.Add(fulname);
    }
}

这将只为你的组合添加数学科目的教师,不确定你想完成什么,但如果我正确理解你,你可以做到这一点

    txtTeacher.Items.Clear();
    while (rdr.Read())
   {
       string sub = rdr["T_Subject"].ToString();
       string fname = rdr["Emp_FName"].ToString();
       string lname = rdr["Emp_LName"].ToString();
       string fulname = fname + ' ' + lname;

    if(sub=="Math")
    {

        txtTeacher.Items.Add(fulname);
    }
}

这将只向您的组合中添加数学科目的教师

您可以按科目创建词典。请参阅下面的代码

使用制度; 使用System.Collections.Generic; 使用系统组件模型; 使用系统数据; 使用系统图; 使用System.Linq; 使用系统文本; 使用System.Windows.Forms; 命名空间Windows窗体应用程序4 { 公共部分类Form1:Form { 公共表格1 { 初始化组件; } 员工名单=新名单; 私有无效按钮1\u单击对象发送者,事件参数e { 不公开; cmd=new SqlCommandSELECT Emp_FName,Emp_LName,T_Subject FROM Emp_Position='Teacher',con; rdr=cmd.ExecuteReader; 而rdr.Read { 员工newEmployee=新员工; employees.AddnewEmployee; newEmployee.sub=rdr[T_Subject].ToString; newEmployee.fname=rdr[Emp_fname].ToString; newEmployee.lname=rdr[Emp_lname].ToString; newEmployee.fulname=fname+''+lname; } Dictionary dict=employees.AsEnumerable .GroupByx=>x.sub,y=>y .ToDictionaryx=>x.Key,y=>y.ToList; 关闭; con.关闭; } } 公营雇员 { 公共字符串sub{get;set;} 公共字符串fname{get;set;} 公共字符串lname{get;set;} 公共字符串fulname{get;set;} }
} 您可以按主题创建词典。请参阅下面的代码

使用制度; 使用System.Collections.Generic; 使用系统组件模型; 使用系统数据; 使用系统图; 使用System.Linq; 使用Sys 临时文本; 使用System.Windows.Forms; 命名空间Windows窗体应用程序4 { 公共部分类Form1:Form { 公共表格1 { 初始化组件; } 员工名单=新名单; 私有无效按钮1\u单击对象发送者,事件参数e { 不公开; cmd=new SqlCommandSELECT Emp_FName,Emp_LName,T_Subject FROM Emp_Position='Teacher',con; rdr=cmd.ExecuteReader; 而rdr.Read { 员工newEmployee=新员工; employees.AddnewEmployee; newEmployee.sub=rdr[T_Subject].ToString; newEmployee.fname=rdr[Emp_fname].ToString; newEmployee.lname=rdr[Emp_lname].ToString; newEmployee.fulname=fname+''+lname; } Dictionary dict=employees.AsEnumerable .GroupByx=>x.sub,y=>y .ToDictionaryx=>x.Key,y=>y.ToList; 关闭; con.关闭; } } 公营雇员 { 公共字符串sub{get;set;} 公共字符串fname{get;set;} 公共字符串lname{get;set;} 公共字符串fulname{get;set;} }
}那么,您的代码现在不想做什么呢?为什么要在这里循环呢?只需使用一些分组来构建查询,并在一个查询中获得整个数据集。它只拾取特定主题的教师。。。但当我尝试选择另一个主题时,它并没有显示出来……好吧,您的sql是硬编码的,只返回给老师。如果您想返回给定职位的数据,则应将其参数化。您能否澄清问题所在以及您的期望?我不太清楚你想做什么。那么,你的代码现在不想做什么呢?为什么要在这里循环呢?只需使用一些分组来构建查询,并在一个查询中获得整个数据集。它只拾取特定主题的教师。。。但当我尝试选择另一个主题时,它并没有显示出来……好吧,您的sql是硬编码的,只返回给老师。如果您想返回给定职位的数据,则应将其参数化。您能否澄清问题所在以及您的期望?我有点不清楚你想做什么。是的,我很抱歉弄糊涂了,这是一个组合框。。。我实际上在帮助一个朋友。。。我没有修改它。非常感谢@simon在RCL。没问题,但你明白为什么它不起作用吗?我很困惑。。。我们需要先清除组合框,然后循环开始工作。。。现在它正在工作。。。谢谢!!!是的,我很抱歉弄糊涂了这是一个组合框。。。我实际上在帮助一个朋友。。。我没有修改它。非常感谢@simon在RCL。没问题,但你明白为什么它不起作用吗?我很困惑。。。我们需要先清除组合框,然后循环开始工作。。。现在它正在工作。。。谢谢!!!