我有一個文本框,我保存到使用ASP.NET C#中的SQL數據庫中保存文本時繞過'(報價)的問題。如何使用SQL
問題就像他和它的使用引號,例如文字。當你保存它時,我得到一個SQL錯誤。
從以往的經驗來解決這個問題,我要用就用替換命令查找報價的所有出現,並用其他字符替換它們。然後,如果我要讀取數據庫和之前保存的文本,我會再次替換。
有沒有更好的做這件事?或者你仍然需要使用這種「舊」的方式。
我有一個文本框,我保存到使用ASP.NET C#中的SQL數據庫中保存文本時繞過'(報價)的問題。如何使用SQL
問題就像他和它的使用引號,例如文字。當你保存它時,我得到一個SQL錯誤。
從以往的經驗來解決這個問題,我要用就用替換命令查找報價的所有出現,並用其他字符替換它們。然後,如果我要讀取數據庫和之前保存的文本,我會再次替換。
有沒有更好的做這件事?或者你仍然需要使用這種「舊」的方式。
使用參數化查詢。
使用替代是危險的,可能會導致無意SQL注入漏洞。
嚴重的是,使用參數。這比試圖處理每個角落案例要容易得多。 – 2011-04-12 14:44:29
注射風險真的是問題 - 使用參數 – Randy 2011-04-12 14:55:34
感謝您的提示;長時間沒有編程,這一切都是一點一點回到我身上。 ;) – TeaDrinkingGeek 2011-04-12 15:04:54
始終使用參數化查詢。切勿將字符串連接在一起(具有未清理的輸入信息)以便即時創建SQL。您可能會面臨SQL注入攻擊的風險。
請仔細閱讀以下指南:
http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx
而且當你理解了以下四格漫畫,你準備代碼:
這個。另外,請參閱http://bobby-tables.com/ – 2011-04-12 14:43:38
至於其他的答案指出, 正確這裏的答案是使用參數化查詢。
但是,這有時是不可能的。在這種情況下,你最好加引號:
String str = "he's";
str = str.Replace("'", "''");
有兩種方法來解決這個問題:
我會推薦第一種方法,因爲在我看來它更清潔(更安全)。如果您使用C#爲ASP.NET,你可以做這樣的事情在我下面的例子:
string clientName = "Test client";
SqlCommand sqlCommand = new SqlCommand("SELECT COUNT(*) FROM Client WHERE UPPER(ClientName) = UPPER(@ClientName)", connection);
sqlCommand.Parameters.AddWithValue("@ClientName", clientName);
你找到一個網站/例子顯示像'「SELECT * FROM x,其中Y ='」 +東西+「'」'?我們應該集體追捕他們.. – 2011-04-12 14:49:26
請注意民間對參數化查詢的看法:SQL注入是一個嚴重的問題。 – gbn 2011-04-12 14:58:18