2016-05-10 13 views
0

Ich versuche, ein kleines Projekt in C# WPF zu machen, und ich bin mit Blick auf das folgende Problem:C# WPF Abfrage mehr Tabellen mit Ado.Net

ich eine Datenbank mit mehreren Tabellen, einer von ihnen trägt den Namen " Person "und hat eine Reihe von Attributen (Name, Alter usw.), eines der Attribute ist" CompanyId "(es stellt die Firma dar, für die die Person arbeitet) und ist ein Fremdschlüssel für die Tabelle" Company ". Die Tabelle "Firma" hat eine ID und einen Namen als Attribute.

Ich versuche, die Attribute der Person in einem Textblock anzuzeigen, wenn ich den Namen der Person aus einer Listbox auswähle. Das Problem, das ich bin Bewurf ist, wenn ich ein Attribut anzuzeigen versuchen (aus Tabelle Person), das ist ein Fremdschlüssel zu einer anderen Tabelle (CompanyId-> Company)

Hier ist ein Teil des Codes:

using (SqlConnection conn = new SqlConnection(cs)) 
      { 
       conn.Open(); 
       SqlCommand scmd = conn.CreateCommand(); 
       scmd.CommandText = "SELECT * FROM dbo.Person WHERE [email protected]"; 
       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(); 
       } 

Wie kann ich das Attribut "Name" aus der Firma Tabelle anzeigen, so dass es das Unternehmen widerspiegelt, für das die ausgewählte Person arbeitet?

+0

Sie benötigen ein [beitreten] (https zu tun: // en. wikipedia.org/wiki/Join_(SQL)) – DrewJordan

Antwort

0

Ihre scmd.CommandText sollte sein:

SELECT * FROM dbo.Person p 
join dbo.Company c ON p.CompanyId = c.CompanyId 
WHERE [email protected] 
+0

Danke! es funktionierte. – Cristian

0

versuchen, diese aktualisiert

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 [email protected]"; 
    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(); 
} 

hoffe, es hilft Ihnen

+0

@Cristian sehe meine aktualisierte Antwort –

+0

Ich habe die Abfrage im ersten Kommentar verwendet. Vielen Dank! – Cristian