2017-01-31 2 views
0

내 프로젝트에서 사용할 SELECT 쿼리를 작성하고 있습니다. 지금까지 나는 내 문제는 학생이 일반 세보다 많거나 적은 과목을 복용하는 경우에 나는, SubjectIDs 및 GradeIDs의 동적 번호를 선택해야 할 수 있어야한다는 것입니다(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 

있습니다.

내 쿼리 생성합니다

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

CurrentID이의 목적을 위해 "1"입니다.

각 GradeID와 SubjectID는 나중에 다룰 수있는 다른 테이블의 값과 일치합니다.

각 3 개의 등급 ID를 별도의 값으로 가질 수 있어야합니다. 배열을 사용할 수는 있지만 코드 작성 방법을 모르겠습니다. "YourGrade (4), YourSubject (4)"에 표시된대로 이전에 시도했습니다.

데이터 그리드를 채우기 위해 데이터를 사용할 계획입니다.

+0

데이터 표에 데이터를 사용하려면 데이터 어댑터 또는 데이터 표를 채우기 위해 날짜 어댑터를 사용하는 것이 가장 좋은 이유는 무엇입니까? –

+0

내 문제는 데이터를 표시하는 방법이 아니며, 내 프로그램 내에서 다른 작동하는 DataGrid가 있습니다. 질문을 읽으면 테이블의 데이터가 일련의 숫자로 표시되어 사용자에게 정보를 전달하지 않으므로 다른 기능이 필요합니다. –

답변

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"]) 
    }); 
} 

- 2011 년 2 월 2 일 수정 -

웹에 무료 변환기가 있습니다. 위의 스 니펫에 해당하는 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; 

내 테이블 이름 등을 사용하고 있습니다.

관련 문제