2011-04-29 60 views
0
Dim con As SqlConnection 
     con = New SqlConnection("server=chinna; uid=sa; [email protected]; database=icms") 
     con.Open() 
     Dim cmd As SqlCommand 
     cmd = New SqlCommand("select pass from personal where idno=" & TextBox1.Text, con) 
     cmd.CommandType = CommandType.Text 
     Dim rdr As SqlDataReader 
     rdr = cmd.ExecuteReader 
     If rdr.Read() Then 

      TextBox2.Text = rdr.ToString() 
      Response.Redirect("default.aspx") 
     Else 
      MsgBox("incorrect password") 
+4

您有SQL注入易變性。 – SLaks 2011-04-29 14:21:39

+0

你面臨什麼問題? 雖然你可以發現一些錯誤,但是你提供的信息很少,但是更多的信息不會是一件壞事。 – Ruben 2011-04-29 14:21:56

+3

您應該命名您的文本框。 – SLaks 2011-04-29 14:23:05

回答

4

你需要在查詢中使用參數面臨的問題:

cmd = New SqlCommand("select pass from personal where [email protected]", con) 
cmd.Parameters.AddWithValue("param", TextBox1.Text); 
+0

謝謝你正在工作 – 2011-04-29 14:55:33

+1

你應該接受這個答案, – SLaks 2011-04-29 14:56:14

0

應該

cmd = New SqlCommand("select pass from personal where idno='" & TextBox1.Text & "'", con) 

超出代碼似乎是ASP.net。我們無法在客戶端瀏覽器上顯示的VB.net中執行MsgBox。

+0

加入引號會使其工作,但會留下SQL注入攻擊漏洞。如果文本框中的文本包含',那麼你可能會遇到麻煩,也就是文本'test'; DROP TABLE personal; GO'「 – pstrjds 2011-04-29 15:16:49

1

您錯過了DataSource任務。

在調用DataBind之前添加GridView1.DataSource = rdr

你如果塊應該是這樣的:在RDR

If rdr.Read() Then 
GridView1.Visible = True    
GridView1.DataSource = rdr 
GridView1.DataBind()   
End If 
0

使用HasRows並設置爲DataSource GridView1

Dim rdr As SqlDataReader 
    rdr = cmd.ExecuteReader() 
    If rdr.HasRows Then 
     GridView1.Visible = True 
     GridView1.DataSource = rdr 
     GridView1.DataBind() 
    End If 
3

使用ExecuteScalar而不是ExecuteReader

Dim password As String 
password = cmd.ExecuteScalar.ToString() 

僅供參考,以純文本形式存儲密碼並像這樣比較是非常糟糕的做法。您應該使用單向醃製加密對密碼進行加密,然後在驗證時執行相同的操作,然後比較加密的值。

+0

是的,但是你應該重複閱讀,而不是傾銷它到一個字符串。 – 2011-04-29 16:37:06

+1

對不起,刪除了我的評論。 – mellamokb 2011-04-29 16:37:41

+0

非常感謝您的先生 – 2011-04-29 16:38:44

0

你的錯誤是什麼,或者你剛剛得到rdr爲null?

我沒有看到一個outpout參數。您必須有一個。你只有一個輸入參數。

+1

您不需要輸出參數即可獲取SELECT查詢的結果。查詢的結果是輸出。 – mellamokb 2011-04-29 16:34:40

+0

mellamokb是正確的。我的表述不準確。 – George 2011-04-29 16:47:33

0
  1. 您需要以某種方式標記用戶使用會話變量或登錄身份登錄。否則,任何人都可以通過直接導航到登錄版本的頁面。
  2. MsgBox(在asp.net中無效,因爲它會在服務器上顯示消息,而不是在客戶端上。嘗試使用頁面上的Label來通過設置其文本來顯示錯誤消息。
  3. 你有什麼問題?它只是「不工作」?它不會正確驗證您的密碼嗎?你會得到某種異常嗎?你可以發佈結果嗎?