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

C# 使用StringBuilder编写语句的更简单方法,c#,.net,c#-4.0,C#,.net,C# 4.0,我正在尝试转换下面的查询,该查询根据布尔值执行update语句。我是基于if语句添加仓库的,但我不确定如何使用StringBuilder编写它。我对C#很陌生 我尝试了以下几点: StringBuilder query = new StringBuilder(); query.Append(value ? "UPDATE Warehouse SET usen = 'T' WHERE warehouse='"); if (warehouse.Equals("T

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

我尝试了以下几点:

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

这不起作用。很明显我做错了什么。有人能帮我弄清楚吗

query.Append(value ? "UPDATE  Warehouse SET usen = 'T' WHERE warehouse='");
这不是有效的C

我建议大家仔细阅读条件运算符。看看你问题的第一行(我已经重新格式化了)


这样做的目的是有条件地为查询变量赋值。如果值==true,它将分配
“更新仓库集usen='T'WHERE Warehouse='01'”
,或者如果值==false,它将分配
“更新仓库集use='F'WHERE Warehouse='01'”

这是您试图做的吗

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所说,您编写代码的方法是错误的。

有比用字符串构造查询并对数据库执行查询更好的方法

正如@AlexeiLevenkov所建议的,您应该使用参数化查询。看

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

发件人:

“虽然StringBuilder类通常提供更好的性能 而不是字符串类,则不应自动替换字符串 无论何时需要操纵字符串,都可以使用StringBuilder。 性能取决于字符串的大小和要存储的内存量 将分配给新字符串,即应用程序所在的系统 正在执行,以及操作的类型。您应该准备好进行测试 用于确定StringBuilder是否实际提供 显著的性能改进。”

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

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

query.(TWarehouse+“”)这是打字错误吗?它没有
Append
“显然我做错了什么”-我想你说的是用字符串连接来构造SQL查询,而不是使用参数化查询。。。我不明白为什么以您尝试的方式构造查询会产生更可读的代码。@AlexeiLevenkov它们是根据条件参数化的。我可以根据仓库条件创建两行单独的查询,但这是重复的,不是吗?
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("'");
string format = "UPDATE Warehouse SET use = '{0}' WHERE warehouse='01'";
string query = string.Format(format, value ? "T" : "F");