2013-08-18 34 views
1

我需要打開一個新的表單,如果用戶名和密碼是正確的,但我不能讓這個代碼工作,如果我輸入一個正確的用戶名或密碼它什麼也不做。C#登錄使用SQL Server數據庫不工作

private void login_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string connection = @"Data Source=DX-PC;Initial Catalog=login;Integrated Security=True"; 
     SqlConnection cn = new SqlConnection(connection); 

     cn.Open(); 

     string userText = user.Text; 
     string passText = pass.Text; 

     SqlCommand cmd = new SqlCommand("SELECT ISNULL(Username, '') AS Username, ISNULL(Password,'') AS Password FROM log WHERE Username = @username and Password = @password", cn); 
     cmd.Parameters.Add(new SqlParameter("username", userText)); 
     cmd.Parameters.Add(new SqlParameter("password", passText)); 

     SqlDataReader dr = cmd.ExecuteReader(); 

     try 
     { 
      dr.Read(); 
      if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText) 
      { 
       MessageBox.Show("This message won't Display"); 
      } 
     } 
     catch 
     { 
      MessageBox.Show("Invalid Username or Password"); 
     } 

     dr.Close(); 
     cn.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

您是否收到任何錯誤? –

+0

可能是一打理由。您'Initial Catalog = login'不存在。你犯錯。你已經爲你的數據庫添加了奇怪的值,爲什麼你會對來自數據庫的字符串使用trim?它更可能使用來自文本框的文本的修剪。 –

+1

不要加入這個俱樂部:http://plaintextoffenders.com/ – Tom

回答

1

我相信這個問題是在:代碼的

   if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText) 
       { 

        MessageBox.Show("This message won't Display"); 



       } 

部分。嘗試添加一個else如下:

   if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText) 
       { 

        MessageBox.Show("This message won't Display"); 



       } else { 
        MessageBox.Show(string.Format("{0}!={1}, {2}!={3}" 
         ,dr["Username"].ToString().Trim(),userText, 
         dr["Password"].ToString().Trim(),passText 
        ); 
       } 

,你可能會發現你的問題。

+0

非常感謝! – Adax

0

試試這個代碼

 cn.open 
     MySqlDataAdapter LoginAdapter = new MySqlDataAdapter(); 
     dynamic CommandQuerry = @"SELECT * From users WHERE Username='" + UsernameField.Text + "'AND Password='" + PasswordField.Text + "';"; 
     MySqlCommand LoginCommand = new MySqlCommand(); //The Login Command 
     MySqlDataReader LoginDataReader = default(MySqlDataReader); //Create a reader variable to check login details. 

     if (cn.State == ConnectionState.Open) 
     { 
       LoginCommand.Connection = SelectedSchoolDB; 
       LoginCommand.CommandText = CommandQuerry; 
       LoginAdapter.SelectCommand = LoginCommand; 

       LoginDataReader = LoginCommand.ExecuteReader(); 

       if (Convert.ToInt32(LoginDataReader.HasRows) == 0) 
       { 
        DialogResult a = MessageBox.Show(@"Invalid username/password, please try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
       } 
       else 
       { 
        LoginDataReader.Close(); // Close The reader 
        This.FormName.Hide(); //Close the login form 
        Newform.ShowDialog(); //Show the new form 
       } 
cn.close() 
} 

希望這個代碼可以幫助:)

+0

如果你需要每個代碼的解釋讓我知道。 –

+1

警告:SQL注入危險高於 – spender

+0

@spender你能解釋一下嗎?這怎麼可能?以及如何預防它?加上我認爲SQL注入適用於網站而不是C#應用程序 –

0

雖然你的代碼提供的是容易受到SQL注入& XSS,但要回答你的問題,在SQL查詢的過濾條件字符串comaprision是大小寫敏感的,其中作爲.NET代碼上面會區分大小寫。

相關問題