2017-05-06 72 views
0

我正在處理一個項目,我在navicat上添加了一個查詢,顯示了我想要的完美結果,但是當我在項目中使用相同查詢時,它只顯示了5行結果。C# - DataGridView不顯示完整的查詢結果

用於填充datagridview和獲取數據的代碼如下所示。

string cs = "*info*"; 
    MySqlConnection liga = new MySqlConnection(cs); 
    string query = "*I have the full query futher down, its big and it looks stange in here*"; 
    MySqlCommand comando = new MySqlCommand(query, liga); 
    int nInt = Convert.ToInt32(textBox1.Text); 

    comando.Parameters.AddWithValue("@ni", nInt); 
    try 
    { 
     liga.Open(); 
     MySqlDataReader leitor = comando.ExecuteReader(); 

     DataTable tabela = new DataTable(); 
     tabela.Load(leitor); 
     dataGridView1.DataSource = tabela; 
     leitor.Close(); 
    } 
    catch (MySqlException ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
     liga.Close(); 
    } 

QUERY

SELECT 
disciplinas.nome AS Disciplina, 
mods_alunos.numero, 
mods_alunos.nota 

FROM 
mods_alunos 

INNER JOIN disciplinas ON mods_alunos.codDisc = disciplinas.codDisc 

WHERE 
nInterno = @ni 

我來,它已經做的INNER JOIN,因爲我只是SELECT * FROM mods_alunos它顯示超過5個結果

結論編輯1:table schema

What i should be getting on DGV

+0

有沒有辦法讓我們知道什麼結果是正確的,我們沒有您的數據或要求。但是,如果你想要'mods_alunos'中的所有行,並且沒有匹配的其他表中有空值,你可能需要一個'LEFT OUTER JOIN'。 – Crowcoder

+0

我試過用左外連接它沒有改變結果。給我同樣的navicat和項目 – Cacheira

+0

這就是我的意思,我們不知道肯定,爲什麼我沒有發佈它作爲答案。正如Rahul所建議的那樣,我們需要知道您的數據是什麼樣的,以及您期望得到什麼結果。僅僅通過查看查詢就沒有問題。 – Crowcoder

回答

-1

您已經使用了一次只返回1行的ExecuteReader方法。 您可以使用ExecuteScalar方法返回可用於填充GridView的完整表格。

+0

'DataTable'的'Load()'方法需要一個閱讀器,代碼是正確的。而'ExecuteScalar'不會返回一個完整的表。 – Crowcoder

0

您應該考慮使用的LEFT OUTER JOIN而不是像INNER JOIN

SELECT 
disciplinas.nome AS Disciplina, 
mods_alunos.numero, 
mods_alunos.nota  
FROM mods_alunos  
LEFT OUTER JOIN disciplinas ON mods_alunos.codDisc = disciplinas.codDisc  
WHERE nInterno = @ni 
+0

您的查詢和我的結果在navicat和應用程序 – Cacheira

+0

@Cacheira,然後發佈您的表架構以及示例數據 – Rahul

+0

只是編輯了一些圖片 – Cacheira