2016-10-17 3040 views
1

代碼丟失(我猜)。我想在列表框中顯示學生ID和姓名。但是,我看到這一點:如何打印從SQL Server數據庫中檢索到的2列

enter image description here

我想不通的問題,尤其是與內部聯接。

private void button1_Click(object sender, EventArgs e) 
{ 
    string strName = ""; 

    connect.Open(); 
    SqlCommand command = new SqlCommand(" Select Student_tbl.StudentName, Student_tbl.StudentID, Module_tbl.ModuleID FROM[Course-Student] INNER JOIN Student_tbl ON [Course-Student].SID = Student_tbl.StudentID INNER JOIN Module_tbl ON[Course-Student].CID = Module_tbl.ModuleID WHERE(Module_tbl.ModuleID = '" + tbCourse.Text+"')",connect); 

    command.ExecuteNonQuery(); 

    SqlDataReader reader = command.ExecuteReader(); 

    while (reader.Read()) 
    { 
     strName = reader[1].ToString(); 
     listBox1.Items.Add(strName); 
    } 

    connect.Close(); 
} 
+2

不要執行你的查詢兩次 - 首先用'command.ExecuteNonQuery()'(這裏*完全沒用*,因爲你沒有插入或刪除任何東西),然後第二次用'.ExecuteReader()'。只調用** **真正需要的是 - 在這裏:'ExecuteReader()',因爲你要返回你想要迭代的結果集。 –

+0

謝謝..非常有幫助:) –

回答

2

您正在打印只讀取StudentID字段中的檢索項。更改while循環如下檢索兩個字段並連接所有的值:

while (reader.Read()) 
{ 
    var name = reader[0].ToString(); 
    var id = reader[1].ToString(); 
    listBox1.Items.Add(id + " " + name); 
} 

您也可以使用String Interpolation(這是string.Format C#6語法糖)是這樣的:

while (reader.Read()) 
{ 
    listBox1.Items.Add($"{reader[1].ToString()} {reader[0].ToString()}"); 
} 

而且,對於sql語句:不要使用字符串連接來創建語句。這對SQL注入很敏感。改用Parameterized Queries

+0

不錯..非常有幫助。主席先生,如何刪除重複數據?例如MOD3--它顯示我想要的所有列表,但如果我嘗試搜索MOD2,MOD3的列表沒有清除或刪除。我做了一些研究,但我不太瞭解代碼。我也製作清晰的按鈕。 private void button2_Click(object sender,EventArgs e)// CLear BUtton { listBox1.Items.Clear(); } –

+0

@madhiahmahmod - 這是一個後續問題,應該在單獨的問題中提出。如果你正在使用集合linq的'Distinct()'是一個很好用的東西。 –

相關問題