2016-01-18 16 views
1

我正在创建一个自动生成时间表的窗体应用程序。我有一个问题,当用户从下拉列表中选择学期编号时(从1-8),我应该在查询中写什么?我的代码如下。c#查询组合框选定的文本

private void button_generate_Click(object sender, EventArgs e) 
{ 
    SqlCommand com; 
    SqlConnection con = new SqlConnection("Data Source=MAJOR-DYNASTI;Initial Catalog=ESS;Integrated Security=True"); 
    con.Open(); 
    string a = comboBox_semester.SelectedText; 
    string str = "SELECT CourseName, TeacherName, RoomName FROM Course_teacher, RoomInfo where Semester= ORDER BY NEWID(); "; 
    com = new SqlCommand(str, con); 
    SqlDataReader reader = com.ExecuteReader(); 
    if (reader.HasRows) 
    { 

     Random random = new Random(); 
     var labels = new Label[] { label1, label2, label3, label4, label5, label6, label7, label8,label9,label10,label11,label12,label13,label14,label15,label16, 
            label17,label18,label19,label20,label21,label22,label23,label24,label25,label26,label27,label28,label29,label30,label31, 
            label32,label33,label34,label35,label36,label37,label38,label39,label40,label41,label42,label43,label44,label45,label46,label47,label48, 
            label49,label50}; 
     label1.Text = ""; label2.Text = ""; label3.Text = ""; label4.Text = ""; label5.Text = ""; label6.Text = ""; 
     label7.Text = "";label8.Text = "";label9.Text = "";label10.Text = "";label11.Text = "";label12.Text = "";label13.Text = "";label14.Text = "";label15.Text = "";label16.Text = ""; 
            label17.Text = "";label18.Text = "";label19.Text = "";label20.Text = "";label21.Text = "";label22.Text = "";label23.Text = "";label24.Text = "";label25.Text = "";label26.Text = "";label27.Text = "";label28.Text = "";label29.Text = "";label30.Text = "";label31.Text = ""; 
            label32.Text = ""; label33.Text = ""; label34.Text = ""; label35.Text = ""; label36.Text = ""; label37.Text = ""; label38.Text = ""; label39.Text = ""; label40.Text = ""; label41.Text = ""; label42.Text = ""; label43.Text = ""; label44.Text = ""; label45.Text = ""; label46.Text = ""; label47.Text = ""; label48.Text = ""; 
            label49.Text = "";label50.Text = ""; 

     if (
      comboBox1.SelectedItem==null || 
      comboBox2.SelectedItem==null || 
      comboBox_semester.SelectedItem==null) 
     { 
      MessageBox.Show("Please Select Complete Detail"); 

     } 
     else 
     { 
      while (reader.Read()) 
      { 

       int randomNumber = random.Next(1, 50); 

       labels[randomNumber].Text = String.Format("{0},\r\n{1},\r\n{2}", reader["CourseName"], reader["TeacherName"], reader["RoomName"]); 
      } 
     } 
    } 

我想为这两条线路查询。

string a = comboBox_semester.SelectedText; 
string str = "SELECT CourseName, TeacherName, RoomName FROM Course_teacher, RoomInfo where Semester=(what should I need to write here) ORDER BY NEWID();); 

请帮助

+0

所以你有一个字符串持有学期选择的用户,你不确定如何喂它到你的查询? –

+0

这不能回答你的问题,但是我会认为查询组合框选择是不明智的,因为用户可以犯一个“错误”,或者只是随机点击可能会减慢/冻结你的应用程序的选项/ MVC – KGCybeX

+0

@DrewKennedy是的,这是我的问题 – Fary

回答

0

要做到这一点,最好的办法是要看起来像这样:

"Where Semester = @Semester" 

然后,在下面的行,你加一个参数来喜欢你的SqlCommand对象所以:

com.Parameters.AddWithValue("@Semester", a); 

这让SqlCommand对象知道你的替代变量(我的名字d it @Semester现在)与你从用户收到的价值。

+0

即时获取没有错误,但现在当我点击按钮..没有什么事情发生.... – Fary

+0

是您的按钮的点击事件设置为您的方法,重新期待着火? – aaron

1

你需要把你的变量a到你的查询,像这样:

string str = "SELECT CourseName, TeacherName, RoomName FROM Course_teacher, " + 
"RoomInfo WHERE Semester = @Semester ORDER BY NEWID()"; 

com.Parameters.Add(new SqlParameter("Semester", a)); 

只要注意,我清理您的查询一点点,我介绍了parameterized queries万一你不熟悉他们。

+0

它向我展示了一个错误,说“使用UNASSIGNED LOCAL VARIABLE”com。“为什么它会到来? – Fary

+0

@Fary这意味着你没有正确粘贴上面的代码,你需要首先实例化com:'com =新的SqlCommand(str,con);' –