2011-06-16 31 views
5

與此question如何內C#寫長長的SQL查詢的關係,解決方案建議,長的SQL查詢應該寫成:逐字字符串文字中的替換? 。

string query = @" 
    SELECT 
     c.CUSTOMER_ID, 
     COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME 
     ct.NAME as CUSTOMER_TYPE 
    FROM 
     CT_CUSTOMER_TYPE AS ct INNER JOIN CUSTOMER AS c 
      ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID 
    "; 

這讓我好奇的另一個相關的問題。我能以某種方式使用替代嗎?也就是說,如果說表名更改但查詢保持不變,我將如何管理?我是否必須回到使用字符串連接構建字符串的其他方法,還是有更優雅的方式?

回答

19

爲什麼不使用string.Format?在你給具體的例子,你可以不喜歡

string query = @" 
SELECT 
    c.CUSTOMER_ID, 
    COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME 
    ct.NAME as CUSTOMER_TYPE 
FROM 
    {0} AS ct INNER JOIN {1} AS c 
     ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID 
"; 

而且調用

string real_query = string.Format(query, tblName1, tblName2); 
+0

這是一個很好的迴應和想法。 – 2013-04-15 02:08:03

4

是的,你可以使用String.Format方法。

string custtype = "CT_CUSTOMER_TYPE"; 
string cust = "CUSTOMER"; 
string query = @" 
SELECT 
    c.CUSTOMER_ID, 
    COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME 
    ct.NAME as CUSTOMER_TYPE 
FROM 
    {0} AS ct INNER JOIN {1} AS c 
     ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID 
"; 

string endQuery = String.Format(query, custtype, cust); 

String.Format方法將取代通過{X}用字符串以下的參數順序地識別的參數,所以{0}將與custtype的值來代替,和{1}使用的值卡斯特。

1

如果您還沒有,可以考慮使用LINQ to SQL。

回答實際問題時,如果您正在創建查詢,則可以使用string.Format,正如其他人提到的一樣。如果您希望修改現有的字符串,請嘗試使用string.ReplaceRegex.Replace,如here所述。那就是:

string query = @" 
    SELECT 
     c.CUSTOMER_ID, 
     COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME 
     ct.NAME as CUSTOMER_TYPE 
    FROM 
     CT_CUSTOMER_TYPE AS ct INNER JOIN CUSTOMER AS c 
      ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID 
    "; 
query.Replace("CT_CUSTOMER_TYPE", "NEW_TABLE_NAME");