【发布时间】:2016-08-01 21:37:20
【问题描述】:
我有课程表(CID,CName),另一个表显示每门课程 CourseMajor(CID,MNom)的专业。
我有一个包含专业号码的黎明名单。如果用户从列表中选择一个专业编号,则应填写另一个列表,其中包含所选专业的课程。
我有下面的代码显示所有课程,而不仅仅是所选专业号码的课程! 我使用了 LEFT JOIN、RIGHT JOIN、INNER JOIN、FULL OUTER JOIN....它们都不起作用。
注意:我使用的是 C#、asp.net、vs.net...
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TBCourse FULL JOIN TbCourseMajor ON TBCourse.CId = TbCourseMajor.CId AND TbCourseMajor.MNom = '" + DLMNom.SelectedValue + "' ", con))
{
con.Open();
cmd.ExecuteNonQuery();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
while (reader.Read())
{
DLCName.Items.Add(new ListItem(reader["CName"].ToString(), reader["CNom"].ToString()));
}
}
else { TxtCRN.Text = "Not worked"; }
}
}
这是关于表格的一些细节:
CREATE TABLE [dbo].[TBCourse] (
[CId] INT IDENTITY (1, 1) NOT NULL,
[CNom] INT NOT NULL,
[CName] NVARCHAR (50) NOT NULL,
[Chours] NCHAR (10) NOT NULL,
CONSTRAINT [PK_TBCourse] PRIMARY KEY CLUSTERED ([CId] ASC)
);
CREATE TABLE [dbo].[TbCourseMajor] (
[CId] INT NOT NULL,
[MNom] INT NOT NULL,
PRIMARY KEY CLUSTERED ([CId] ASC),
FOREIGN KEY ([CId]) REFERENCES [dbo].[TBCourse] ([CId]),
FOREIGN KEY ([MNom]) REFERENCES [dbo].[TbMajor] ([MNom])
);
【问题讨论】:
-
如果您只想查看所选专业编号的课程,您可以使用
INNER JOIN。如果这不起作用,您需要告诉我们更多关于您的数据库架构的信息(TBCourse与TbCourseMajor的关系),提供一些示例数据,并告诉我们您在选择特定主编号时会得到什么。 -
是的。每次用户更改专业时,您都必须重新查询 SQL 以获取该专业的课程列表。但是,我认为它们之间必须有一个参考表,因为一门课程可以包含在多个专业中。
-
devlin carnage 感谢您的重播。 INNER JOIN 执行后给出 0 行我将写上有关表的详细信息。
-
感谢 Slava Murygin 重播.. 在我的数据库中,一门课程只属于一个专业。不是因为更新它的问题是关于SQL命令的错误结果。
-
首先,使用 MS SQL Management Studio 并以纯文本形式运行您的查询。第二 - 不要对“WHERE”使用“ON”子句(这有效,但有点误用)第三 - 去无缘无故地连接 SQL 查询,让自己感到羞耻。使用 SQLParameters!
标签: c# asp.net sql-server join