我有两个表,tableA
和tableB
。
在tableA
我有一个列id
作为主键,在tableB
中,id
是外键。
现在,我想通过输入id
no来在网格视图中显示所有这两个表格的数据。当我创建外键但它只在gridview中显示一个表数据。
cmd = new SqlCommand("select * from [tableA]WHERE id=1", con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;
和表创建代码:
CREATE TABLE [dbo].[tableA]
(
[Id] INT NOT NULL,
[NAME] NCHAR(10) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
和tableB:
CREATE TABLE [dbo].[tableB]
(
[Id] INT NOT NULL,
[fathername] NCHAR(10) NULL,
CONSTRAINT [FK_tableB_ToTable]
FOREIGN KEY([Id]) REFERENCES [dbo].[tableA]([Id])
);
请帮助我试过但不能。
答案 0 :(得分:1)
你可以加入像这样的表
cmd = new SqlCommand("select A.ID, A.Name, B.Id, B.fathername from [tableA] as A join [tableB] as B on A.id = B.Id WHERE A.id=1", con);
为节省一点空间,我使用了tableA(A)和tableB(B)的别名。
您所做的这种关系有点无意义,因为您可以在名称(tableA
)的同一个表中使用父名。如果一个父亲有两个孩子,你会有太多记录......
要了解有关联接的更多信息,请稍微google一下。 This是一个简单的教程
答案 1 :(得分:0)
您应该使用内部联接来显示两个表的结果。 像这样:
cmd = new SqlCommand("SELECT * FROM tableA INNER JOIN tableB ON tableA.id = tableB.id where tableA.id=1", con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;