C#WPF使用Ado.Net查询多个表

时间:2016-05-10 18:35:32

标签: c# sql-server wpf ado.net foreign-key-relationship

我正在尝试在C#WPF中创建一个小项目,我面临以下问题:

我有一个包含多个表的数据库,其中一个名为“Person”并且有一堆属性(名称,年龄等),其中一个属性是“CompanyId”(它表示Person正在为之工作的公司) )并且是“公司”表的外键。 “公司”表有一个Id和一个名称作为属性。

当我从列表框中选择人名时,我试图在文本块中显示Person的属性。我面临的问题是当我试图显示一个属性(来自Person表)时,它是另一个表的外键(CompanyId-> Company)

以下是代码的一部分:

using (SqlConnection conn = new SqlConnection(cs))
            {
                conn.Open();
                SqlCommand scmd = conn.CreateCommand();
                scmd.CommandText = "SELECT * FROM dbo.Person WHERE Id=@PId";
                scmd.Parameters.AddWithValue("@PId", lstContactList.SelectedIndex + 1);
                SqlDataReader dr = scmd.ExecuteReader();
                while (dr.Read())
                {
                    txtbFirstName.Text = dr["FirstName"].ToString();
                    txtbLastName.Text = dr["LAstName"].ToString();
                    txtbCompany.Text = dr["Company"].ToString();
                }

如何在公司表格中显示属性“名称”,以便它反映所选人员所在的公司?

2 个答案:

答案 0 :(得分:0)

你的scmd.CommandText应该是:

SELECT * FROM dbo.Person p 
join dbo.Company c ON p.CompanyId = c.CompanyId
WHERE Id=@PId

答案 1 :(得分:0)

尝试此更新

int companyId=0;
using (SqlConnection conn = new SqlConnection(cs))
{
     conn.Open();
     SqlCommand scmd = conn.CreateCommand();
     scmd.CommandText = "SELECT *,CompanyName FROM dbo.Person p join dbo.Company c ON p.CompanyId = c.CompanyId WHERE Id=@PId";
     scmd.Parameters.AddWithValue("@PId", lstContactList.SelectedIndex + 1);
     SqlDataReader dr = scmd.ExecuteReader();
     if(dr.Read())
     {
          txtbFirstName.Text = dr["FirstName"].ToString();
          txtbLastName.Text = dr["LAstName"].ToString();
          txtbCompany.Text=int.Parse(dr["CompanyName "].ToString());
     }
     conn.Close();
}

希望它可以帮到你