使用StringBuilder编写语句的简单方法

时间:2015-10-21 02:04:31

标签: c# .net c#-4.0

我正在尝试转换下面的查询,该查询根据布尔值执行update语句。我正在添加基于if语句的仓库,但我不确定如何用StringBuilder编写它。我对C#很安静。

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

这不起作用。显然我做错了什么。任何人都可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

除了在字符串中构造查询并对数据库执行查询之外,还有更好的方法。

正如@AlexeiLevenkov建议的那样,您应该使用参数化查询。请参阅How to Execute a Parameterized Query

对于长字符串和更复杂的情况,建议使用StringBuilder

来自StringBuilder documentation

  

“虽然StringBuilder类通常提供更好的性能   比String类,你不应该自动替换String   每当你想操纵字符串时,使用StringBuilder。   性能取决于字符串的大小,内存量   被分配给新的字符串,即您的应用所在的系统   执行,以及操作的类型。你应该准备好测试   你的应用程序,以确定StringBuilder是否实际提供了   显着的性能提升。 “

在您的情况下,您可以使用string.Format并使用更易读的代码,例如:

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

答案 1 :(得分: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'"

答案 2 :(得分: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("'");

正如卡洛斯所说,你编写代码的方式是错误的。