string.format():不使用加号的多行字符串

时间:2010-03-13 10:34:42

标签: c#

string.format()如何帮助避免在这样的语句中使用“+”:

 
string statement =" SELECT DISTINCT titel as linieName" +
                  " FROM qry_Forecast_Taktzeiten" +
                  " WHERE linieName LIKE 'lin%';"; 

5 个答案:

答案 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%';“;