2017-01-31 51 views
0

Я пишу запрос SELECT для использования в моем проекте. До сих пор у меня есть(SQL, VB.NET) Как выбрать несколько значений из одной строки и назначить их переменным?

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 

Моя проблема заключается в том, что мне нужно, чтобы быть в состоянии иметь динамическое количество SubjectIDs и GradeIDs быть выбран, в случае, если студент принимает больше или меньше предметов, чем нормальные три.

Мой запрос производит:

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

CurrentID является "1" для целей настоящего.

Каждый идентификатор GradeID и SubjectID соответствует значениям в других таблицах, над которыми я могу работать позже.

Мне нужно иметь каждый из этих трех идентификаторов класса в отдельном значении, массив можно использовать, но я не знаю, как его кодировать. Я попытался сделать это раньше, как показано в «YourGrade (4), YourSubject (4)».

Я намерен использовать данные для заполнения сетки данных.

+0

Если вы хотите использовать данные для сетки данных, почему бы просто не использовать адаптер даты для заполнения набора данных или таблицы данных? –

+0

Моя проблема заключается не в том, как представить данные, у меня есть другие действующие datagrids в моей программе. Если вы прочитаете вопрос, вы увидите, что мои данные из таблицы представляют собой ряд чисел, которые не передавали бы какую-либо информацию пользователю, и поэтому мне нужны другие функции, прежде чем я смогу это сделать. –

ответ

0

Создайте объект домена для «Студент», а затем загрузите записи в список объектов-учеников.

Я не знаю, 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 

Код базы данных:

Dim результаты В новый список (Of Student)()

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; 

Это использование моих имен таблиц и т.