2017-05-06 29 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