2017-01-31 3 views
0

私は自分のプロジェクトで使用するSELECTクエリを書いています。これまでのところ、私は(SQL、VB.NET)どのように1つの行から複数​​の値を選択して変数に割り当てるのですか?

Dim conn As New OleDbConnection 
    Dim StudentID, GradeID, SubjectID As Integer 
    Dim YourGrade(4), YourSubject(4) As String 
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =H:\Year 13 Computer Science\Project\Usernames and Passwords.accdb" 


     conn.Open() 
     Dim sql = "Select * From Grades where StudentID =" & CurrentID 
     Dim cmd As New OleDbCommand(sql, conn) 
     Dim dr As OleDbDataReader = cmd.ExecuteReader 

     While dr.Read 
      StudentID = dr("StudentID") 
      GradeID = dr("GradeID") 
      SubjectID = dr("SubjectID") 
     End While 

を持っている私の問題は、学生が通常の3以上または少ない科目を取っている場合には、私は、選択するSubjectIDsとGradeIDsの動的な数を持ってできるようにする必要があるということです。

私のクエリが生成します。

StudentID GradeID SubjectID 
1    2  1 
1    4  13 
1    3  19 

CurrentIDは、この目的のために "1" です。

各GradeIDとSubjectIDは、後で作業できる他の表の値に対応しています。

3つのグレードIDのそれぞれを別々の値にする必要があります。配列を使用することはできますが、コード化する方法はわかりません。私は「YourGrade(4)、YourSubject(4)」に示されているように早くそれを試みました。

データグリッドに記入するためにデータを使用する予定です。

+0

データグリッドのデータを使用する場合は、データセットまたはデータテーブルを入力するために日付アダプタを使用するだけではいかがですか? –

+0

私の問題はデータを提示する方法ではなく、私のプログラム内に他の機能するデータグリッドがあります。あなたが質問を読むと、テーブルからの私のデータは、ユーザに情報を伝えることのない一連の数字であることがわかります。そのためには、他の機能が必要です。 –

答えて

0

"Student"のドメインオブジェクトを作成し、そのレコードをStudentオブジェクトのリストに読み込みます。

私はVB.netを知らないが、C#で同等のドメインオブジェクトは、次のようになります。

public class Student 
{ 
    public int StudentId { get; set; } 
    public int GradeId { get; set; } 
    public int SubjectId { get; set; } 
} 

そして、DataReaderオブジェクトをループするコードとリストを作成する:

List<Student> results = new List<Student>(); 

while (dr.Read()) 
{ 
    results.Add(new Student() 
    { 
     StudentId = Convert.ToInt32(dr["StudentID"]), 
     GradeId = Convert.ToInt32(dr["GradeId"]), 
     SubjectId = Convert.ToInt32(dr["SubjectId"]) 
    }); 
} 

- 編集2/2/2017 -

ウェブにはフリーコンバーターがあります。これらは上記のスニペットに相当するVB.netのものです。

クラス:

Public Class Student 
    Public Property StudentId() As Integer 
     Get 
      Return m_StudentId 
     End Get 
     Set 
      m_StudentId = Value 
     End Set 
    End Property 
    Private m_StudentId As Integer 
    Public Property GradeId() As Integer 
     Get 
      Return m_GradeId 
     End Get 
     Set 
      m_GradeId = Value 
     End Set 
    End Property 
    Private m_GradeId As Integer 
    Public Property SubjectId() As Integer 
     Get 
      Return m_SubjectId 
     End Get 
     Set 
      m_SubjectId = Value 
     End Set 
    End Property 
    Private m_SubjectId As Integer 
End Class 

データベース・コード:(学生の)新規一覧として

薄暗い結果()

While dr.Read() 
    results.Add(New Student() With { _ 
     Key .StudentId = Convert.ToInt32(dr("StudentID")), _ 
     Key .GradeId = Convert.ToInt32(dr("GradeId")), _ 
     Key .SubjectId = Convert.ToInt32(dr("SubjectId")) _ 
    }) 
End While 
+0

ありがとう、残念ながら私はC#を知らないのですが、私は今作業するものがあります。 –

+0

無料のコンバーターがオンラインになっています... VB.netのコードを投稿しました。それは私にギリシャのように見えますが、うまくいけば助けてください。 – Hambone

+0

フリーコンバーター?今私は、馬鹿だと感じる。私は私のプロジェクトへのアクセスを得る次回これを試してみます、ありがとう! –

0

は、私はいくつかの掘削、それは記入していませんでした私がしようとしていた方法でDataGridを使用するには、最も簡単な方法はINNER JOIN SQLステートメントを使用することです。 SQLでは、クエリは次のとおりです。

SELECT Students.FirstName, Students.LastName, Subjects.SubjectName, GradeVals.Grade 
FROM GradeVals INNER JOIN (Students INNER JOIN (Subjects INNER JOIN Grades ON Subjects.SubjectID = Grades.SubjectID) ON Students.StudentID = Grades.StudentID) ON GradeVals.GradeID = Grades.GradeID; 

これは私のテーブル名などを使用しています。

関連する問題