访问多个表的SQL查询

时间:2014-02-27 13:28:07

标签: c# sql .net sql-server crystal-reports

如果只显示单个表的结果,它可以正常工作。

SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name FROM Student", ceConnection);

SqlCeDataAdapter adapter = new SqlCeDataAdapter(command);
DataSet set = new DataSet();
adapter.Fill(set, "Student");

ReportDocument document = new ReportDocument();
document.Load(@"C:\Users\user\documents\visual studio 2012\Projects\Student_Scholarship_management2\Student_Scholarship_management2\MainReport.rpt");
document.SetDataSource(set.Tables[0]);

crystalReportViewer1.ReportSource = document;

现在上面的代码工作正常,因为它只引用了一个表,但是如果我使用下面的查询来访问多个表中的记录

SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name,Campus.C_ID FROM Student INNER JOIN Campus ON Student.Campus_ID=Campus.C_ID", ceConnection);

仅显示来自学生表的那些列。我尝试通过数据库专家导入和链接更多表,但没有用。我已经验证了查询,并且结果很好,只是没有在水晶报告中显示。

我已在数据库专家中添加了该表,并在报表设计器中添加了相关列。不幸的是它只显示一个表中的数据。可能导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

我会看一下你的set命令:

document.SetDataSource(set.Tables[0]);

对我来说,似乎只设置了DataSet中的第一个表。

我在我正在处理的应用程序中有类似的情况,这是我的代码(传递大约10个表):

var data = new DataSet();

//Do stuff to populate the dataset

report.SetDataSource(data);

最后一行将报表的数据源设置为DataSet中的所有表。

答案 1 :(得分:0)

致电时:

adapter.Fill(set, "Student");

在那一刻,构建了数据集中的表模式。因此,如果您在下面填写其他列,则只会考虑第一次填充的列。您的解决方案是替换:

SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name FROM Student", ceConnection);

SqlCeCommand command = new SqlCeCommand("SELECT Student.EnrolNo,Student.St_Name, null as C_ID FROM Student", ceConnection);