【问题标题】:string composition in c#c#中的字符串组合
【发布时间】:2011-05-31 22:55:20
【问题描述】:

我试图弄清楚为什么这段代码在 C# 中不起作用以及如何修复它。

string first = "hello";
string second = "look at" + first + "me";

有什么建议吗?

编辑: 对不起,我认为我犯的错误是一个简单的新手错误。我想还有更多。 这是我的实际代码:

 string toolOp = lstToolOpen.SelectedValue.ToString();
 string sqlComm = "INSERT INTO ES_TOOL_FACET (esfa_facet, esfa_tool) values (" +
            + toolOp + ", " +  cmbFacet.SelectedValue +"   ) ";

我得到的错误是:运算符 + 不能应用于“字符串”类型的操作数。第 3 行代码的 toolOp 下有一条红线。

【问题讨论】:

  • 什么是不工作的?预期的结果是什么?
  • 想解释一下它在什么方面不起作用以及您期望什么?第二个变成“look athellome”,也许你应该添加空格?
  • 我觉得不错。什么错误给你视觉工作室?
  • 工作正常。它甚至可以编译。比我在这里看到的很多代码都要好。
  • 所以你只需要在 cmbFacet.SelectedValue 上添加一个 ToString() :p

标签: c# .net string string-concatenation


【解决方案1】:

toolOp 之前有两个 +。应该是:

string sqlComm = "INSERT INTO ES_TOOL_FACET (esfa_facet, esfa_tool) values (" +
        toolOp + ", " +  cmbFacet.SelectedValue +"   ) ";

话虽如此,我建议您使用参数化查询。请记住,每次在构造 SQL 查询时使用 + 运算符时,您都做错了:

string sqlComm = "INSERT INTO ES_TOOL_FACET (esfa_facet, esfa_tool) VALUES (@esfa_facet, @esfa_tool)";
sqlCommand.Parameters.AddWithValue("@esfa_facet", toolOp);
sqlCommand.Parameters.AddWithValue("@esfa_tool", cmbFacet.SelectedValue);

现在您可以安全地抵御 SQL 注入了。

结论:永远不要在 SQL 查询中使用+

【讨论】:

  • 除非数据来自可信来源。甚至不要这样做。
  • +1 用于使用参数化查询。 SQL 中的字符串连接总是无一例外都是错误的。
  • @Darin @cdhowie: 不是从来没有,我使用+ 和 SQL 查询......当我想给其他人一个 sql 注入示例并告诉他们不要使用它时。
  • 我也见过string.Format+ 一样邪恶
  • @Andrzej Nosal,是的,string.Format 也应该避免使用。
猜你喜欢
  • 2015-12-16
  • 2013-12-30
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
相关资源
最近更新 更多