簡體   English   中英

C#WPF SQL選擇內部聯接

[英]C# WPF SQL SELECT INNER JOIN

我試圖加入一個用戶表來檢索用戶的登錄名。 我希望有兩個INNER加入一個CreatedByUser_loginnameModifiedByUser_loginname

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

這是令人討厭的代碼

這行不通

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"));
    }
}

如果您對表名使用別名(如User as U1),則查詢的名稱[user]不再存在,則必須在所有后續引用中使用U1。

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

您仍然在join子句中使用User,

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

固定

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM