2012-11-06 173 views
0

我需要將兩個表綁定到一個數據集中。我有三張名爲Student,StudentMarks的表。用第一個結果查詢第二個表

在這裏,如果我知道我studentId可以查詢該學生的表像

DataSet ds=new DataSet(); 

SqlCommand cmd=new SqlCommand(" 
SELECT * 
FROM STUDENTS 
WHERE STUDENTID=1; 
SELECT * 
FROM STUDENTS 
WHERE STUDENTID=1"); 

SqlDataAdapter da=new SqlDataAdapter(cmd); 
da.Fill(ds); 

這樣。這樣我可以像ds.Table [0]和ds.Table [1]那樣訪問這兩個表。

但我的問題是,如果我不知道studentid,如果我想查詢所有的學生以及他們的商標和我在兩個不同的表來獲得這些細節我怎樣才能得到?

如果我加入這兩個表,其結果將是在一個表中,我不知道如何做到這一點,任何人都可以幫助我在這裏?提前致謝。

+1

你可以在檢索結果後解釋你想要做什麼嗎?獲得所有與之相對應的標記的Stundets,可以通過像mrigesh gupta這樣的JOIN來完成,Mahmoud Gamal建議你。這將是正常的接近。爲什麼你想要兩個數據集? – Johannes

+0

@Johannes我需要查詢數據集裏面的DataTables像ds.DataTable [0]和ds.DataTable [1],因爲我在另一個地方使用相同的格式(當我知道學生ID) – shanish

+1

但爲什麼?你可以用一些簡單的SQL來做所有事情。反正你可以運行兩個Querys並添加一個數據集的結果看[鏈接](http://stackoverflow.com/questions/7631286/how-to-store-multiple-datatables-into-single-dataset-in-c) – Johannes

回答

2

試試這個;

SELECT 
    s.* 
FROM STUDENTS s 
INNER JOIN StudentMarks m ON s.STUDENTID = m.STUDENTID ; 

SELECT 
    m.* 
FROM STUDENTS s 
INNER JOIN StudentMarks m ON s.STUDENTID = m.STUDENTID ; 
+0

不,這裏得到了錯誤的結果 – shanish

+1

您只需更換S. *與s。<學生名稱字段>和M. *與m。

+0

是否有可能再加入一個表格?其名爲StudentAttendance – shanish

1

我想查詢所有的學生以及他們的標記,我已經 在兩個不同的表中獲得這些細節我怎麼能得到?

爲什麼你想在兩個不同的表中獲得兩個不同表格的細節?

可以JOIN兩個表,但是這會給你只有一組像這樣:

SELECT 
    s.*, 
    m.* 
FROM STUDENTS s 
INNER JOIN StudentMarks m ON s.STUDENTID = m.STUDENTID ; 
-- You can add WHERE s.STUDENTID = 1 here as well; 

但是,您可以限制選擇這些加入到s.*m.*

+0

感謝您的回覆,因爲我說我在這裏使用DataSet,所以我需要訪問學生以及他們的標記在一次,這就是,所以,如果我使用像ds。表[0]會給我Student表和ds.Table [1]會給我那個學生的標記 – shanish

+1

@Shanish - 你可以用我的查詢來做到這一點。你只有一個'ds.Table [0]',但是在這個表裏面你會有'Studnetname','mark'等等。然後你可以從這張表中選擇你想要選擇的列。您不需要將這些列放在兩個不同的表中,以便從中單獨選擇。 –

+0

感謝Mahmour Gamal,我以爲這是第一次,但我只是想知道,有兩張桌子將簡化我的要求,無論如何再次感謝您的回覆 – shanish

1

您可以使用DataTable.Select()方法來獲得行您需要的studentID,像這樣:

for (int i = 0; i < ds.Tables[0].Rows.Count) 
{ 
    int studentID = ds.Tables[0].Rows[i].Field<int>("StudentID"); 
    DataRow[] rows = ds.Tables[1].Select(string.Format("WHERE StudentID = {0}", studentID)); 
    //Do something with your mark rows here 
} 

或者你也可以定義數據集內的關係使用DataRelations

//Add a primary key to the student table so you can search on StudentID 
ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns["StudentID"] }; 

//Add the relationship between "StudentID" columns in each table 
ds.Relations.Add(ds.Tables[0].Columns["StudentID"], ds.Tables[1].Columns["StudentID"]); 

//Check if the table contains the given StudentID 
if (ds.Tables[0].Rows.Contains(studentID)) 
{ 
    //Get all child rows associated with this Student ID 
    DataRow[] rows = ds.Tables[0].Rows.Find(studentID).GetChildRows(); 
} 
+0

謝謝GarethD,我會檢查它 – shanish

相關問題