如何显示具有外键c#的表数据

时间:2017-12-30 17:55:06

标签: c# sql-server

我有两个表,tableAtableB

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])
 );

请帮助我试过但不能。

2 个答案:

答案 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;