2016-10-17 9 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()'を使用してクエリを2回実行しないでください(何も挿入または削除していないので、ここでは全く役に立たない*です)。 '.ExecuteReader()'。 **本当に必要なのは**ここだけです:** ExecuteReader() 'あなたが反復処理したい結果セットを返すので。 –

+0

ありがとう..とても役に立ちました:) –

答えて

2

リーダからの取り出しは、StudentIDフィールドのみです。値の両方のフィールドを取得し、連結するために、次のようにあなたのwhileループを変更しますよう、また

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

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

ます。また、使用することができますが、このような(string.FormatのためのC#6シンタックスシュガーである)String Interpolation sql文の場合:文字列連結を使用して文を作成しないでください。これはSQLインジェクションの影響を受けやすいです。代わりに使用するParameterized Queries

+0

nice ..非常に役に立ちました。先生、反復データを削除する方法は?例えばMOD3 - それは私が望むすべてのリストを表示しますが、MOD2を検索しようとすると、MOD3のリストは消去または削除されませんでした。私はいくつかの研究をしましたが、実際にコードを理解していません。私もクリアボタンを作成します。プライベートvoid button2_Click(オブジェクト送信者、EventArgs e)// CLear BUtton { listBox1.Items.Clear(); } –

+0

@madhiahmahmod - これはフォローアップの質問であり、別の質問で尋ねる必要があります。あなたがコレクションで作業している場合、linqのDistinct()は使い方がいいです。 –

関連する問題