2009-12-13 4 views
0

Je tente de rejoindre une table utilisateur pour récupérer le nom de connexion des utilisateurs. Je souhaite avoir deux joint un pour INNER CreatedByUser_loginname et ModifiedByUser_loginnameC# WPF SQL SELECT INNER JOIN

Mais au moment Im juste essayer d'obtenir la syntaxe de chaîne de requête SQL droite. MAIS, Quand je change le nom de INNER JOIN avec un 'nom' AS, une exception est levée quand la méthode sqlreader() est exécutée. Si je supprime l'AS ... Cela fonctionne, mais alors je suis incapable d'ajouter la deuxième INNER JOIN à la même table d'utilisateur pour obtenir le nom du nom de connexion modifiedbyuser.

est ici le code incriminé

Ce travail ne marche pas

String sqlComStr = "SELECT Company_ID, Company_Name, Company_Address1, Company_Address2, Company_Address3, Company_Suburb, Company_City, " + 
    "Company_State, Company_PostCode, Company_Phone, Company_Fax, Company_WebsiteUrl, Company_Status, Company_ModifiedByUser_ID, Company_CreatedByUser_ID, " + 
    " [U1].User_LoginName " + 
    "FROM Company INNER JOIN [User] AS U1 ON [User].User_ID = [Company].Company_CreatedByUser_ID WHERE [Company].isDeleted = 0" + companyFilter; 

Cela ne

String sqlComStr = "SELECT Company_ID, Company_Name, Company_Address1, Company_Address2, Company_Address3, Company_Suburb, Company_City, " + 
    "Company_State, Company_PostCode, Company_Phone, Company_Fax, Company_WebsiteUrl, Company_Status, Company_ModifiedByUser_ID, Company_CreatedByUser_ID, " + 
    " User_LoginName " + 
    "FROM Company INNER JOIN [User] ON [User].User_ID = [Company].Company_CreatedByUser_ID WHERE [Company].isDeleted = 0" + companyFilter; 

....

String sqlComStr = "SELECT Company_ID, Company_Name, Company_Address1, Company_Address2, Company_Address3, Company_Suburb, Company_City, " + 
    "Company_State, Company_PostCode, Company_Phone, Company_Fax, Company_WebsiteUrl, Company_Status, Company_ModifiedByUser_ID, Company_CreatedByUser_ID, " + 
    " [U1].User_LoginName " + 
    "FROM Company INNER JOIN [User] AS U1 ON [User].User_ID = [Company].Company_CreatedByUser_ID WHERE [Company].isDeleted = 0" + companyFilter; 

sqlcmd.CommandText = sqlComStr; 
sqlCon.ConnectionString = "Data Source='PTSSHM\\SQLEXPRESS'; Initial Catalog='PROACTIVE'; Integrated Security=True;"; 
//sqlCon.ConnectionString = App.appSqlConnectionString; 
sqlcmd.Connection = sqlCon; 

try 
{ 
    sqlCon.Open(); 

    SqlDataReader sqlReader = sqlcmd.ExecuteReader(CommandBehavior.Default); 
    // If no Exception thrown at this point clear the quote items 
    companys.Clear(); 

    while (sqlReader.Read()) 
    // Read each row and create a new quite item object int he quoteitems list 
    { 
     companys.Add(new Company((int)sqlReader["Company_ID"], 
      (string)sqlReader["Company_Name"].ToString(), 
      (string)sqlReader["Company_Address1"].ToString(), 
      (string)sqlReader["Company_Address2"].ToString(), 
      (string)sqlReader["Company_Address3"].ToString(), 
      (string)sqlReader["Company_Suburb"].ToString(), 
      (string)sqlReader["Company_City"].ToString(), 
      (string)sqlReader["Company_State"].ToString(),  
      (string)sqlReader["Company_PostCode"].ToString(), 
      (string)sqlReader["Company_Phone"].ToString(), 
      (string)sqlReader["Company_Fax"].ToString(), 
      (string)sqlReader["Company_WebsiteUrl"].ToString(), 
      (string)sqlReader["Company_Status"].ToString(), 
      (int)sqlReader["Company_ModifiedByUser_ID"], 
      (int)sqlReader["Company_CreatedByUser_ID"], 
      (string)sqlReader["[U1].User_LoginName"].ToString(), "d")); 
    } 
} 
+0

S'il vous plaît essayer de formater tous vos extraits de code que le code . Extraire les requêtes de la source C# pour fournir des requêtes SQL pures permettrait aux autres de les aider plus facilement. –

Répondre

2

Si vous utilisez un alias pour une table nom tel que User comme U1, alors le nom [user] n'existe plus pour la requête, vous devez utiliser U1 sur toutes les références suivantes.

INNER JOIN [User] AS U1 ON [User].User_ID = [Company].Company_CreatedByUser_ID 

Vous utilisez toujours l'utilisateur dans la clause de jointure,

INNER JOIN [User] AS U1 ON U1.User_ID = [Company].Company_CreatedByUser_ID 
1

fixe

String sqlComStr = "SELECT Company_ID, Company_Name, Company_Address1, Company_Address2, Company_Address3, Company_Suburb, Company_City, " + 
      "Company_State, Company_PostCode, Company_Phone, Company_Fax, Company_WebsiteUrl, Company_Status, Company_ModifiedByUser_ID, Company_CreatedByUser_ID, " + 
      " [CreateUser].User_LoginName AS CreateUser, [ModUser].User_LoginName AS ModUser " + 
      "FROM Company INNER JOIN [User] As [CreateUser] ON [CreateUser].User_ID = [Company].Company_CreatedByUser_ID INNER JOIN [User] AS [ModUser] ON [ModUser].User_ID = [Company].Company_ModifiedByUser_ID WHERE [Company].isDeleted = 0" + companyFilter; 

et

companys.Add(new Company((int)sqlReader["Company_ID"], (string)sqlReader["Company_Name"].ToString(), (string)sqlReader["Company_Address1"].ToString(), 
        (string)sqlReader["Company_Address2"].ToString(), (string)sqlReader["Company_Address3"].ToString(), (string)sqlReader["Company_Suburb"].ToString(), 
        (string)sqlReader["Company_City"].ToString(), (string)sqlReader["Company_State"].ToString(), (string)sqlReader["Company_PostCode"].ToString(), 
        (string)sqlReader["Company_Phone"].ToString(), (string)sqlReader["Company_Fax"].ToString(), (string)sqlReader["Company_WebsiteUrl"].ToString(), 
        (string)sqlReader["Company_Status"].ToString(), (int)sqlReader["Company_ModifiedByUser_ID"], (int)sqlReader["Company_CreatedByUser_ID"], 
        (string)sqlReader["CreateUser"].ToString(), (string)sqlReader["ModUser"].ToString())); 
Questions connexes