2011-09-24 147 views
0

我有一个这样的字符串:C#问题与string.replace

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

然后我用

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

取代@address与 '猛鬼街',结果变成:

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) ? 

回答

2

那么,首先我应该提到,通常你不应该这样做。您应该将这些值放入您在命令中使用的参数对象中。

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

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

非常感谢guffa,这就是我想要的:) – Willy

5

如果这是你错了绕了一个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

+1:不要使用与string.replace( ...) 为了这。这可能会为SQL注入攻击打开大门。 –

+0

抱歉,brokenglass,我的问题没有道理。我的意思是,让我说我有字符串s =“我是一个好孩子,我有一个好人”。当我使用s.Replace(“good”,“bad”)和结果“我是一个坏男孩,并且我有一个坏人”。我想要的结果是“我是一个坏孩子,我有一个好人”。感谢您的回复:) – Willy

0

如何:

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

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