2009-12-13 71 views
0

我試圖加入用戶表來檢索用戶登錄名。 我希望有兩個INNER加入一個CreatedByUser_loginnameModifiedByUser_loginnameC#WPF SQL SELECT INNER JOIN

但此刻我只是想獲得SQL查詢字符串語法正確。 但是,當我用AS'name'更改INNER JOIN的名稱時,執行sqlreader()方法時會引發異常。如果我刪除了AS ...它可以工作,但是我無法將第二個INNER JOIN添加到同一個用戶表中以獲取modifiedbyuser登錄名的名稱。

這裏是有問題的代碼

這不工作

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; 

這確實

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

請嘗試格式化所有的代碼片段如代碼。從C#源提取查詢以提供純SQL查詢將使其他人更容易提供幫助。 – 2009-12-13 12:15:41

回答

2

如果您使用別名爲表名稱,如User作爲U1,那麼該查詢的名稱[user]不再存在,所有後續引用都必須使用U1。

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

您還在使用用戶的連接子句中,

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

固定

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; 

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