2012-09-15 57 views
1

根據多個複選框的狀態,我有九個字符串,它們是SQL查詢或只是空的(「」)。我需要他們在另一個字符串像組合字符串並在特定位置用另一個字符串分隔它們

string OP = "AND"; 
string query = "select * from table where " + string1 + OP + string2 + OP + string3 + OP + ... + " order by ID;" 

的問題是,在琴絃之間,我需要有一個ANDOR結合。但是,如果任何字符串都是空的,它會給我一個SQL錯誤。 SQL不明白像

select * from table where AND a = "adsf" AND AND AND z = "fghj" AND order by ID; 

它看起來像這樣:

select * from table where a = "adsf" AND z = "fghj" order by ID; 
+3

**不要使用原始的SQL **最低限度,用[*參數化查詢*](HTTP://blog.divergencehosting。 COM/2009/04/09 /使用參數參數化查詢數據庫的交互,cshar-vbnet /)。否則,你很容易受到SQL注入和混亂,容易出錯的命令串聯代碼的影響。 – Adam

+0

你的代碼是什麼樣的?讓我們從這個開始,並從你的工作。 –

+1

你知道,你可能應該提供加括號,因爲你可以混合運營商。另外,你應該在這裏使用stringbuilders。另外,不要這樣做:這是不安全的(除非你完全控制所有的值)。即使如此:使用參數查詢(也稱爲準備陳述) – sehe

回答

1

你可以把字符串數組,刪除空串,並將它們組合使用Join

string[] conditions = new string[] { 
    string1, 
    string2, 
    string3, 
    string4 
}; 

string op = " and "; 
string query = 
    "select * from table where " + 
    String.Join(op, conditions.Where(c => c.Length > 0)) + 
    "select * from table where "; 

併爲框架3.5更改爲:

String.Join(op, conditions.Where(c => c.Length > 0).ToArray()) + 
+0

似乎是更好的解決方案,但拋出一個錯誤「不能隱式地將類型'System.Collections.Generic.IEnumerable '轉換爲字符串[]」。 但另一個也很好。謝謝:) – daydr3amer

+0

@ daydr3amer:哦,你正在使用一箇舊的框架。然後你需要在'Where()'之後加上'.ToArray()'。在您的版本中不存在'Join'重載的情況。 – Guffa

+0

現在很好用啊,謝謝;) – daydr3amer

1
 
string query = 
    "select * from table where " 
    + string1 
    + String.IsNullOrEmpty(string2) ? " " : (OP + string2) 
    + String.IsNullOrEmpty(string3) ? " " : (OP + string3) 
    + ... 
    + " order by ID;" 
+0

是的。但。說真的,***不要這樣做。使用預準備語句 – sehe

1

測試空

string query = "select * from table where " + 
String.IsNullOrEmpty(string1) ? "" : (string1+OP) + 
String.IsNullOrEmpty(string2) ? "" : (string2+OP) + 
...+ 
String.IsNullOrEmpty(string9) ? "" : string9; 


//in case your string ends with AND which will if `string9` is empty 
if (query.EndsWith("AND")) 
{ 
    int andIndex = query.LastIndexOf("AND"); 
    query = query.Substring(0, andIndex); 
} 

query = query + " order by ID;" 
+0

很好,謝謝;) – daydr3amer

相關問題