我有一个这样的字符串:
string query = "INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, @address, @address2)"
然后我使用
将@address
替换为'Elm Street'
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) ?
答案 0 :(得分: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 :(得分:2)
嗯,首先我应该提一下,通常你不应该这样做。您应该将值放在命令中使用的参数对象中。
如果您确实需要出于某种奇怪的原因,可以使用正则表达式匹配所有参数,并替换其中一个参数:
query = Regex.Replace(query, @"@\w+", m => {
if (m.Value == "@address") {
return "'Elm Street'";
} else {
return m.Value;
}
});
答案 2 :(得分:0)
怎么样:
string query = "INSERT INTO CUSTOMER (id, name, address, address2) VALUES(@id, @name, @address1, @address2)";
query = query.Replace("@address1", "'Elm Street'");
有时最简单的解决方案是正确的解决方案。不是在这种情况下。你应该真的使用SqlCommand方法。