2013-03-12 36 views
1
SQLHelper sqhlpr = new SQLHelper(); 
    sqhlpr.SqlText = "Select StudentName from tblStudentInfo where class=" + NurseryButton.Text; 
    DataTable dt = sqhlpr.getDataTable(false); 

這是我code.Now sqhlpr.sqlText的結果是如何在asp中的sql helper的sql語句中使用單撇號顯示列名的值。淨

select StudentName from tblStudentInfo where class= **Nursery** 

(ieNurseryButton.Text =幼兒園),但我想要的結果是從tblStudentInfo其中類=「選擇StudentName苗圃'。如何做到這一點?這看起來很簡單,但我不能只是想出來......

+3

我對這個SqlHelper類不太瞭解,除了你在這裏得到的答案之外,你可能還想了解SQL注入攻擊(這是你的代碼易受攻擊的地方)。 http://colinmackay.co.uk/2005/04/23/sql-injection-attacks-and-some-tips-on-how-to-prevent-them/如果SQLHelper類支持參數化查詢(它真的應該)然後使用它們而不是將數據注入查詢。 – 2013-03-12 15:11:29

+1

您發現的幾乎*任何*數據訪問庫都應該支持*參數*。然後,您可以將此值作爲SQL的參數,而不是手動組裝字符串。這有一個好處,就是你不可能在你的程序中創建一個SQL注入漏洞。如果你的庫(不熟悉'SQLHelper')*不支持參數,這是一個信號庫的標誌。 – 2013-03-12 15:11:36

回答

0

您的查詢字符串。你這樣做:

result = "somestring" + someVariable; 

現在你想在的單層行情,這是這樣做附上someVariable

result = "somestring" + "'" + someVariable + "'"; 

或更短:

result = "somestring'" + someVariable + "'"; 

不過是值得注意的是,手動構建查詢是相當「未完成」的。你應該看看像參數化查詢這樣的工具,甚至像實體框架那樣的O/R映射器。

+0

感謝大家回答並指點我注意sql注入的危險 – 2013-03-12 15:34:49

0

下面的代碼會做你想要什麼:

SQLHelper sqhlpr = new SQLHelper(); 
sqhlpr.SqlText = "Select StudentName from tblStudentInfo where class = '" + NurseryButton.Text + "'"; 
DataTable dt = sqhlpr.getDataTable(false); 

你需要儘管考慮兩件事:

  1. 如果有人提出在NurseryButton.Text撇號莫名其妙
  2. 會發生什麼
  3. SQLHelper會幫你保護你,還是你需要自己動手

您應該以某種方式考慮參數化查詢或存儲過程,以確保您的數據庫輸入安全完成。