2014-08-28 72 views
-2

我在將數據輸入到數據庫時遇到問題。我看過其他文章,關於如何通過轉義來傳遞變量,但這些解決方案不適用,因爲我通過API獲取變量。順便提一下,我使用foreach循環來循環數據。如何通過MySql傳遞帶撇號的C#變量

level = "" + x.Account_Level + ""; 
name = "" + x.name + ""; 
command.CommandText = "INSERT INTO `data` (`level`, `name`) VALUES(" + level + ", " + name + ")"; 
command.ExecuteNonQuery(); 

有時候,一個變量會返回一個撇號,並將代碼搞亂。是否可以在每個撇號之前插入一個斜槓或者是否有像PHP一樣的方式將整個變量用單引號括起來?謝謝!

編輯: 這項工作?我想我需要添加i來更改每個循環的參數名稱,因爲它聲明瞭已聲明的參數。

using (var web = new WebClient()) 
     { 
     web.Encoding = System.Text.Encoding.UTF8; 
     var jsonString = responseFromServer; 
     var jss = new JavaScriptSerializer(); 
     var MatchesList = jss.Deserialize<List<Matches>>(jsonString); 
     string connectString = "Server=myServer;Database=myDB;Uid=myUser;Pwd=myPass;"; 
     MySqlConnection connect = new MySqlConnection(connectString); 
     MySqlCommand command = connect.CreateCommand(); 
     int i = 1; 


     connect.Open(); 
     foreach (Matches x in MatchesList) 
     { 

      command.CommandText = "INSERT INTO `data` (`level`, `name`) VALUES(?level" + i + ", ?name" + i + ")"; 

      command.Parameters.AddWithValue("level" + i, x.Account_Level); 
      command.Parameters.AddWithValue("mode" + i, x.name); 

      command.ExecuteNonQuery(); 
      i++; 
     } 
     connect.Close();      
    } 
+1

你真的應該使用SQL參數,你的代碼是SQL注入攻擊敞開的。作爲一個很好的副作用,你也可以這樣擺脫你的問題。 – Dirk 2014-08-28 05:34:19

+0

看看ip「c#mysql參數」 – 2014-08-28 05:36:35

回答

2

的快速和骯髒的解決辦法是使用類似:

level = level.Replace("'","whatever"); 

但仍存在與該問題。它不會捕獲其他不好的字符,它可能甚至不會用於撇號上的邊緣情況。

最好解決方案是不構建查詢的方式。相反,學習如何使用參數化查詢,以便SQL注入攻擊是不可能的,並且無論您放入什麼內容(理所當然),參數都可以工作。

例如(從我的頭頂,所以可能需要一些調試):

MySqlCommand cmd = new MySqlCommand(
    "insert into data (level, name) values (?lvl, ?nm)", con); 
cmd.Parameters.Add(new MySqlParameter("lvl", level)); 
cmd.Parameters.Add(new MySqlParameter("nm", name)); 
cmd.ExecuteNonQuery(); 
+0

我試過參數之前,它只是搞砸了foreach循環。它只是返回,我已經宣佈過像'@level'之前。是否有可能在參數名稱中使用var i中的計數並在每個循環中使用i ++? – Kragalon 2014-08-28 05:51:08

+0

@Kragalon,是的,你可以做到這一點。我不會自己:-) – paxdiablo 2014-08-28 05:57:01

+0

這是一個安全問題還是隻是效率低下? – Kragalon 2014-08-28 06:00:27