繁体   English   中英

使用INNER JOIN时为空网格

[英]Empty grid when using INNER JOIN

我正在尝试获取学生的数据并将其显示在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();

有任何想法吗?

我认为对这个问题的评论很好地回答了这个问题,但是我将在这里尝试将它们组合在一起,并添加我自己的想法,以便这篇文章有一个“答案”。

正如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是指向实际代表班级的其他事物的链接表)。

如果您到目前为止已经进行了故障排除,并且似乎没有任何故障原因,那么基础数据就不应该成为问题。

看你的评论,

消息208,级别16,状态1,第1行无效的对象名称“ student”。

我忍不住想知道-您确定没有在某处拼错“学生”吗? 为了帮助防止拼写错误,您可以使用表别名,如下所示:

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

然后从那里建立它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM