string.format()如何帮助避免在这样的语句中使用“+”:
string statement =" SELECT DISTINCT titel as linieName" +
" FROM qry_Forecast_Taktzeiten" +
" WHERE linieName LIKE 'lin%';";
答案 0 :(得分:4)
这里没有必要避免使用plus运算符 - 编译器在编译时加入字符串常量,因此在运行时不会发生连接。
答案 1 :(得分:3)
+
上方的语句用于连接您创建的seveal字符串,以使您的代码更具可读性。 String.Format
在这里不会帮助你!
要避免字符串连接,您可以执行以下操作:
StringBuilder sb = new StringBuilder();
sb.Append(" SELECT DISTINCT titel as linieName");
sb.Append(" FROM qry_Forecast_Taktzeiten");
sb.Append(" WHERE linieName LIKE 'lin%';");
statement = sb.ToString();
如果您想用某些变量替换'lin',您可以使用:
string statement =" SELECT DISTINCT titel as linieName" +
" FROM qry_Forecast_Taktzeiten" +
" WHERE linieName LIKE '{0}';";
statement = string.Format(staement, "lin%");
或
sb.AppendFormat(" WHERE linieName LIKE '{0}';", "lin%");
但是,如果从用户条目中获取“lin%”,则上述所有使用字符串替换({0})的方法都有承担 SQL注入攻击的风险。
所以最好的选择是使用:
string statement =" SELECT DISTINCT titel as linieName" +
" FROM qry_Forecast_Taktzeiten" +
" WHERE linieName LIKE @match;";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = statement;
cmd.Parameters.Add(new SqlParameter("@match", "lin%"));
答案 2 :(得分:2)
您可以使用@
运算符
String linebreaks = @"Break
Lines
With @";
正如DanielBrückner所指出的,linebreaks
的内容将包含空格。以下是上述代码的输出结果:
"Break
Lines
With @"
如果要存储SQL,这不是问题。
答案 3 :(得分:2)
在这种情况下不会,因为 + 只是在多行中断你的语句。如果要将值替换为字符串,可以使用string.Format(),如下所示:
string statement = string.Format("SELECT DISTINCT title FROM table WHERE title LIKE '{0}%'", MyTextBox.Text);
这只是一个例子。请永远不要这样做 - 它会导致SQL注入攻击。
答案 4 :(得分:0)
string statement = @“SELECT DISTINCT titel as linieName 来自qry_Forecast_Taktzeiten 在哪里linieName LIKE'lin%';“;