使用INNER JOIN时清空网格

时间:2015-07-07 21:19:14

标签: c# sql join datagridview

我正在尝试获取学生的数据并将其显示在C#的gridview中。如果我只是运行以下查询,它会从名为student的单个表中获得精细结果。

conn.Open();

da = new SqlDataAdapter("select sID as 'Student ID',  sFirstName as 'First Name', sLastName as 'Last Name', sGender as 'Gender', sDOB as 'Date Of Birth', sSession as 'Session', sClassRollNo as 'Class Roll Number', sAdmissionDate as 'Admission Date', sGuardianFirstName as 'Guardian First Name', sGuardianLastName as 'Guardian Last Name', sGuardianRelationship as 'Guardian Relationship', sGuardianOccupation as 'Guardian Occupation', sGuardianCity as 'City', sAddress as 'Address', sEmail as 'Email', sMobile as 'Mobile No', sPhone as 'Phone' from student", conn);

当我尝试将学生表与课堂表和节目数据联系起来时,除了空格之外什么都没有。

da = new SqlDataAdapter("SELECT student.sID as 'Student ID from Student Table', student.sFirstName as 'Student Name from Student Table', Classes.class as 'Class from Class Table' FROM student INNER JOIN classes ON classes.sID=student.sID", conn);

ds = new System.Data.DataSet();
da.Fill(ds, "student");
gvSearchStudent.DataSource = ds.Tables[0];
conn.Close();

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为对这个问题的评论很好地回答了这个问题,但我会尝试将它们拉到一起并添加我自己的想法,以便这篇文章有一个"答案"。

正如user2864740和Eric J.所说,调试此查询的最佳方法是使用SQL Server Management Studio(SSMS)并试验您的查询以查看底层数据是什么。您已经验证了

SELECT * FROM Student -- I'm using * here as a short cut, 
                      -- you correctly specified the columns you wanted

的工作原理。这告诉我们您的连接字符串(很可能)是正确的(即您将转到正确的数据库)并且Student表存在。接下来你应该做的是

SELECT * FROM Classes

验证您的Classes表是否存在并包含数据。如果没有,你就知道为什么要回到0行了。

接下来,直观地扫描您返回的数据 - 您是否在Student.sID列中看到与Classes.sID列中的所有条目匹配的条目?再说一遍,如果没有,那么你知道为什么你要回到0行。

让我稍等一下,请你做一次健全检查。您确定有Classes.sID列,并且它是Student.sID的外键引用吗?看起来这可能是一个错误,因为这意味着每个班级只能有一个学生(除非Classes是一个链接表,实际上代表一个类的其他东西)。

如果您已经按照目前的故障排除方法进行了操作,并且似乎没有任何失败的原因,则基础数据不应该成为问题。

看看你的评论,

  

Msg 208,Level 16,State 1,Line 1无效的对象名称' student'。

我无法帮助但想知道 - 你确定你没有拼错#34;学生"某处?为了帮助防止拼写错误,您可以使用表别名,如下所示:

SELECT 
    s.sID as 'Student ID from Student Table', 
    s.sFirstName as 'Student Name from Student Table', 
    c.class as 'Class from Class Table' 
FROM student s
    INNER JOIN classes c ON c.sID=s.sID

如果您仍遇到问题,请考虑将查询删除,使其尽可能简单:语法简单:

SELECT *
FROM student
    INNER JOIN classes ON classes.sID=student.sID

然后从那里建立起来。

相关问题