2015-10-21 59 views
2

我試圖轉換下面的查詢,它執行基於布爾值的更新語句。我正在添加基於if語句的倉庫,但我不確定如何使用StringBuilder編寫此代碼。我對C#很陌生。用StringBuilder編寫語句的更簡單的方法

string query = value ? "UPDATE Warehouse SET usen = 'T' WHERE warehouse='01'" : "UPDATE Warehouse SET use = 'F' WHERE warehouse='01'"; 

我嘗試以下操作:

StringBuilder query = new StringBuilder();  
query.Append(value ? "UPDATE Warehouse SET usen = 'T' WHERE warehouse='"); 
       if (warehouse.Equals("T")) 
       query.Append(TWarehouse + "'"); 
      else if (warehouse.Equals("V")) 
       query.Append(VWarehouse + "'"); 
      query.Append(: "UPDATE Warehouse SET usen = 'F' WHERE warehouse); 

這沒有奏效。顯然我做錯了什麼。任何人都可以幫我弄清楚這一點。

+0

'查詢(TWarehouse +。 」'「);'這是一個錯字它不?有'Append'. – Ppp

+0

「顯然我做錯了什麼」 - 我想你是在談論使用字符串連接而不是使用參數化查詢來構建SQL查詢......我不明白爲什麼要按照您嘗試的方式構建查詢會產生更多可讀代碼。 –

+0

@AlexeiLevenkov他們根據條件參數化。我可以根據倉庫條件創建兩個單獨的查詢行,但是如果不是這樣,它會重複嗎? – Ae15

回答

0
query.Append(value ? "UPDATE Warehouse SET usen = 'T' WHERE warehouse='"); 

這是無效的C#。

https://msdn.microsoft.com/en-us/library/ty67wk28.aspx

我建議在有條件的經營者閱讀起來。看看你的問題的第一行(我已經重新格式化了一點)

string query = value 
? "UPDATE Warehouse SET usen = 'T' WHERE warehouse='01'" 
: "UPDATE Warehouse SET use = 'F' WHERE warehouse='01'"; 

這樣做是有條件地分配一個值的查詢變量。如果value == true,它將分配"UPDATE Warehouse SET usen = 'T' WHERE warehouse='01'",否則如果value == false,它將分配"UPDATE Warehouse SET use = 'F' WHERE warehouse='01'"

0

這是你想要做的嗎?

StringBuilder query = new StringBuilder();  
query.Append("UPDATE Warehouse SET usen = '"); 
query.Append(value? "T" : "F"); 
query.Append("' WHERE warehouse='"); 
if(warehouse.Equals("T")) 
{ 
    query.Append(TWarehouse); 
} 
else if(warehouse.Equals("V")) 
{ 
    query.Append(VWarehouse); 
} 
else 
{ 
    query.Append("YourDefaultValue"); 
} 
query.Append("'"); 

正如Carlos所說,你寫代碼的方式是錯誤的。

2

有比在字符串中構造查詢並在數據庫中執行查詢更好的方法。

由於@AlexeiLevenkov建議,您應該使用參數化查詢。見How to Execute a Parameterized Query

此外StringBuilder建議長字符串和更復雜的情況。

StringBuilder documentation

「雖然StringBuilder類通常會提供更好的性能 比String類的,你不應該自動與StringBuilder的,每當你想操作字符串替換字符串 性能取決於大小。的字符串, 的內存量將被分配給新的字符串,您的應用程序執行的系統和 的執行類型,您應該準備測試 您的應用程序以確定StringBuilder是否實際提供了 顯着的性能改善。 「

你的情況,你可以使用string.Format,並有一個更可讀的代碼,如:

string format = "UPDATE Warehouse SET use = '{0}' WHERE warehouse='01'"; 
string query = string.Format(format, value ? "T" : "F"); 
相關問題