(SQL, VB.NET) 如何 select 一行中的多个值并将它们分配给变量?

(SQL, VB.NET) How Do I select multiple values from one row and assign them to variables?

我正在编写 SELECT 查询以在我的项目中使用。到目前为止,我有

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

我的问题是我需要能够选择动态数量的 SubjectID 和 GradeID,以防学生选修的科目多于或少于正常的三个科目。

我的查询结果:

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

为此,CurrentID 为“1”。

每个 GradeID 和 SubjectID 都对应于其他表中的值,我可以稍后处理这些值。

我需要能够将这三个等级 ID 中的每一个都放在一个单独的值中,可以使用一个数组,但我不知道如何编码。如 "YourGrade(4), YourSubject(4)".

所示,我早些时候尝试过

我打算用数据来填写一个Data Grid。

为 "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 等同于上面的代码片段。

Class:

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

数据库代码:

Dim 结果作为新列表(学生)()

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

我做了一些挖掘,发现要按照我尝试的方式填写数据网格,最简单的方法是使用 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;

那是在使用我的 Table 名字等等。