2012-09-05 193 views
0
private void btnCheck_Click(object sender, EventArgs e) 
     { 
      string costring = connection(); 
      string MyQuery = "select expense from dbo.KmtAccounts where date between '"+ txtFromDate +"' and '" +txtToDate +"' and registernumber='" + txtRegNo.Text + "'"; 
      SqlConnection conn = new SqlConnection(costring); 
      SqlCommand cmd = new SqlCommand(MyQuery, conn); 
      conn.Open(); 
      txtResult.Text = Convert.ToString(cmd.ExecuteScalar()); 
      conn.Close(); 
     } 
+3

不要建立這樣的查詢。使用參數化查詢並聲明正確數據類型的參數。閱讀SQL注入。 –

+0

變量的值是什麼?他們可以依靠文化。順便說一句:你不怕SQL注入? –

+1

什麼是你的問題?你只發布代碼和標題! – SMK

回答

3

在您的代碼中有幾點需要改進。

  1. 看來,txtFromDate和txtToDate是控件?!我想你想訪問txtFromDate.Text
  2. 你真的應該利用SqlParameters防止SQL注入(在dotnetperls.com很好的例子)
  3. 您可以檢查,如果你的UI值與某種正確驗證甚至更好,選擇一個控制,只允許有效值DateTimePickerCalendar,...
+0

但我得到的結果,當我運行查詢選擇總和(費用)從dbo.KmtAccounts '05/23/12'和'05/30/12'之間的日期和registernumber ='kl08347' – Naveen

+0

所以txtFromDate是一個* *字符串值** _不控制_ - 檢查點1.什麼** sql注入(2)**和**控件(3)**?嘗試輸入「05/23/12」;從dbo.KmtAccounts刪除; - ''想想會發生什麼! –

+0

現在我正在使用monthcalendar而不是文本框,但我們如何獲取所選日期,應使用monthcalendar的哪個屬性?你可以幫我嗎? – Naveen

2

導致異常的問題是,在的價值和/或txtToDate不被理解爲表示日期。

更大的問題是,似乎很少或根本沒有什麼措施阻止其中一個包含有效值的值後跟';delete from dbo.KmtAccounts;---

這兩個問題將通過查詢select expense from dbo.KmtAccounts where date between @from and @to and [email protected]然後使用參數將日期(作爲日期,而不是字符串)和reg-number添加到查詢中來解決。

相關問題