【问题标题】:C# string.Replace problemC#字符串.替换问题
【发布时间】:2011-11-24 09:36:39
【问题描述】:

我有一个这样的字符串:

string query = "INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, @address, @address2)"

然后我用“榆树街”替换@address

query = query.Replace("@address", "'" + "Elm Street" + "'");

结果变成:

INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, 'Elm Street', 'Elm Street'2)

如何得到结果:

INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, 'Elm Street', @address2) ?

【问题讨论】:

    标签: c# sql string replace


    【解决方案1】:

    嗯,首先我应该提一下,通常你根本不应该这样做。您应该将值放在您在命令中使用的参数对象中。

    如果你真的因为一些奇怪的原因需要这样做,你可以使用正则表达式来匹配所有参数,并替换其中一个:

    query = Regex.Replace(query, @"@\w+", m => {
      if (m.Value == "@address") {
        return "'Elm Street'";
      } else {
        return m.Value;
      }
    });
    

    【讨论】:

      【解决方案2】:

      怎么样:

      string query = "INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, @address1, @address2)";
      query = query.Replace("@address1", "'Elm Street'");
      

      有时最简单的解决方案就是正确的解决方案。在这种情况下不是。您应该真正使用 SqlCommand 方法。

      【讨论】:

        【解决方案3】:

        如果这是一个 SQL 查询,你就搞错了 - 你应该使用 SqlParameter 来参数化你的查询,不需要替换字符串:

        string query = "INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, @address, @address2)";
        
        using (SqlCommand cmd = new SqlCommand(query, myConnection))
        {
            cmd.Parameters.Add(new SqlParameter("@address", SqlDbType.NVarChar)).Value = "Elm Street";
            //add other parameters
        
            cmd.ExecuteNonQuery();
        }
        

        【讨论】:

        • +1:不要为此使用 String.Replace(...)。这可能会为 SQL 注入攻击打开大门。
        • 抱歉碎玻璃,我的问题没有意义。我的意思是,假设我有字符串 s =“我是个好孩子,我有礼貌”。当我使用 s.Replace("good", "bad") 并导致“我是一个坏男孩,我有一个坏习惯”时。我想要的结果是“我是个坏孩子,我有一个好人”。感谢您的回复:)
        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 2015-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        相关资源
        最近更新 更多