您發現了SQL Injection Attacks。根據您指定的原因,僅將用戶提供的數據追加到SQL查詢中並不是一種好策略。系統中的任何用戶都可以嘗試通過注入一些SQL來竊取或破壞您的數據。
鏈接中描述了處理它的方式,但基本上可以指定參數並讓提供的類正確處理數據轉義,以便有人通過「Drop Table」時,它將作爲數據輸入。
下面是CodeBetter.com
SqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM Customers WHERE CustomerID = @CustomerID";
command.Parameters.Add(
new SqlParameter("@CustomerID", SqlDbType.NChar, 5)).Value = customerID;
一個很好的例子,另外,隨意使用LINQ到SQL。它將爲您處理這個問題,並且從開發人員的角度來看更容易。您可以將數據庫拖放到代碼中,它將完全映射每個表。然後,您可以在您的代碼中正確編寫LINQ的SQL語句版本,您將在其中獲得代碼完成和編譯時間檢查錯誤。 This SO question will get you started。
下面是一些簡單的LINQ代碼,可以讓你從數據庫中讀取一個客戶,寫他/她的名字在屏幕上,然後更新自己的個性化問候語(從SQL注入的所有安全):
Customer myCustomer = (
from cust in myDatabase.Customers
where cust.CustomerID == userPassedCustomerID
select cust).Single();
Console.WriteLine(myCustomer.FullName);
myCustomer.PersonalizedGreeting = userPassedGreeting;
myDatabase.SubmitChanges();