2017-10-18 58 views
1

我試圖更新柱/列包含以下值:更新在MySQL

\\localhost\db\kkk\086018\ss\DocA\1_216925.jpg 

\\localhost\db\kkk\086018\dd\DocA\1_216925.jpg 

使用下面的C#代碼:

string str = "update my_document " + 
           "set path = replace (path,'" + fromFolder + "','" + toFolder + "')" + 
           "where doc_id in(select doc_id from patient_document where folder_id='" + id + "')"; 
      str.Replace("\\", "\\\\"); 
      Console.WriteLine(str); 
      using (MySqlConnection conn = new MySqlConnection(ECModel.Instance.ConnString)) 
      { 
       using (MySqlCommand cmd = new MySqlCommand(str, conn)) 
       { 
        try 
        { 
         conn.Open(); 
         cmd.ExecuteNonQuery(); 
        } 
} 

什麼我注意到這個路徑正確地提交給mysql,但它不會反映自C#應用程序和mysql之間,所有\\轉換爲\。

你能介意我怎麼解決我的問題嗎?

  • 我在我的前面也使用@但也解決方案也沒有工作。

**還我注意到,當我運行\\\\它工作正常我的更新語句。

+1

你需要弄清楚如何爲你的數據使用佔位符值,而不是僅僅用連接來搗碎它。這是整個問題的源頭,其中最重要的是[SQL注入漏洞](http://bobby-tables.com/)。 – tadman

+0

@tadman上帝拯救你。我的問題通過使用參數解決。謝謝你的提示。 – MariN

回答

0

爲了保持這個簡單,我認爲你遇到的問題是你實際上需要「@」和轉義值。嘗試這樣的事情。它爲我工作。我對數據結構做了一些假設,並在SQL Server上測試了這一點,而不是MySQL,但我認爲這個概念是正確的,我將代碼恢復爲MySQL客戶端。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Program program = new Program(); 
     program.updateTable("1", @"\\share\from\path", @"\\share\to\path"); 
     Console.ReadLine(); 
    } 

    private void updateTable(string id, string fromFolder, string toFolder) 
    { 
     string str = @"update my_document " + 
        "set path = replace (path,'" + fromFolder + "','" + toFolder + "')" + 
        "where doc_id in(select doc_id from patient_document where folder_id='" + id + "')"; 

     str.Replace("\\", "\\\\"); 

     Console.WriteLine(str); 

     using (MySqlConnection conn = new MySqlConnection(ECModel.Instance.ConnString)) 
     { 
      using (MySqlCommand cmd = new MySqlCommand(str, conn)) 
      { 
       try 
       { 
        conn.Open(); 
        cmd.ExecuteNonQuery(); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
      } 

     } 
    } 
} 
+0

我使用了相同的代碼。但事實並非如此。我改爲使用@tadman建議的參數。 – MariN

+0

我同意參數方法更好的原因有很多。 – LoneBunny