2013-03-10 56 views
0

我試圖讓Windows窗體登錄到另一個, 我使用與用戶和密碼 的代碼如下數據庫:表單驗證命令

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection conn = new SqlConnection("Data Source=mmtsql.XXX.XXXX.XX.XX;Initial Catalog=mmtXX-XXX;User ID=mmtXX-XXX;Password=mmtXX-XXX"); 
    conn.Open(); 
    SqlCommand mycommand = new SqlCommand("SELECT User, Password FROM UsersData WHERE User = '" + textBox1.Text + "' and Password = '" + textBox2.Text + "'", conn); 
    SqlDataReader reader = mycommand.ExecuteReader(); 
    if(reader != null) 
    { 
     if(reader.Read()) 
     { 
      Form1 formload = new Form1(); 
      formload.Show(); 
     } 
     else 
     { 
      label3.Text = "Invalid Username or Password !"; 
     } 
    } 
    else 
    { 
     label3.Text = "Invalid Username or Password !"; 
    } 

問題得到的是,無論我插入到文本框中,對或錯我越來越:

無效的用戶名或密碼!

有無論如何修復我的代碼? 關於;

+3

**不要以純文本**存儲密碼。 – SLaks 2013-03-10 20:11:53

+6

您有一個SQL注入漏洞。 – SLaks 2013-03-10 20:12:16

+0

使用斷點來查看正在執行的查詢。在SQL服務器中運行該查詢並查看您是否獲得任何結果。 – Shyju 2013-03-10 20:13:31

回答

1

我會做這種方式,保持你所使用的方法:

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection conn = new SqlConnection(conn_str); 
    conn.Open(); 
    string sql = "SELECT User, Password 
     FROM UsersData WHERE [email protected] and [email protected]" 
    SqlCommand mycommand = new SqlCommand(sql, conn); 
    //parameterize your query! 
    mycommand.Parameters.AddWithValue("user", txtuser.text); 
    mycommand.Parameters.AddWithValuye("password", txtpassword.password); 

    SqlDataReader reader = mycommand.ExecuteReader(); 
    if(reader == null) 
    { 
     label3.Text = "Database query failed!"; 
    } 
    else if(reader.HasRows) 
    { 
     Form1 formload = new Form1(); 
     formload.Show(); 
    } 
    else 
    { 
     label3.Text = "Invalid Username or Password !"; 
    } 
+0

謝謝你的suggesstion,我已經做了你問我,我越來越「無效的用戶名或密碼」與以前完全一樣 – user2040978 2013-03-10 20:55:53

+0

在這一點上,我將使用Sql Server Mgmt Studio來連接並驗證查詢甚至返回結果。 – 2013-03-10 20:57:23

+0

我會馬上檢查,謝謝 – user2040978 2013-03-10 21:00:01

0

使用參數化查詢,如SLaks提到他們會幫助你對抗SQL注入。 將您的代碼更改爲以下號碼

using (SqlCommand command = new SqlCommand("SELECT User, Password 
    FROM UsersData WHERE [email protected] and [email protected]", connection)) 
    { 
    // 
    // Add new SqlParameter to the command. 
    // 
    command.Parameters.Add(new SqlParameter("user ", textbox1.text)); 
      command.Parameters.Add(new SqlParameter("password", textbox2.text)); 

    SqlDataReader reader = command.ExecuteReader(); 
      if (reader == null) 

    { 
     Form1 formload = new Form1(); 
       formload.Show();  
    } 
      else 
      { 
       label3.Text = "Invalid Username or Password !";  
      } 
    }