我正在尝试转换下面的查询,该查询根据布尔值执行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);
这不起作用。显然我做错了什么。任何人都可以帮我解决这个问题。
答案 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("'");
正如卡洛斯所说,你编写代码的方式是错误的。