2011-09-24 76 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方法。