[英]C# WPF Querying multiple tables with Ado.Net
我正在尝试在C#WPF中创建一个小项目,并且面临以下问题:
我有一个包含多个表的数据库,其中一个表名为“ Person”,并具有一堆属性(名称,年龄等),其中一个属性是“ CompanyId”(代表该Person所在的公司),并且“公司”表的外键。 “公司”表具有一个ID和一个Name作为属性。
当我从列表框中选择人的名字时,我试图在文本块中显示人的属性。 我面临的问题是当我尝试显示来自其他表(CompanyId-> Company)的外键的属性(来自Person表)时
这是代码的一部分:
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();
}
如何显示“公司”表中的“名称”属性,以反映所选人员工作的公司?
您的scmd.CommandText应该为:
SELECT * FROM dbo.Person p
join dbo.Company c ON p.CompanyId = c.CompanyId
WHERE Id=@PId
试试这个更新
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();
}
希望对你有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.