2013-06-18 43 views
0

我是新來的c#,我試圖創建一個用戶輸入用戶名和密碼的頁面登錄。然後,從數據庫讀取這個數據,以驗證user_name和密碼在那裏。我建立了連接,它似乎正在工作,因爲在此代碼中,如果我輸入列的標題,它將允許我登錄,但不是來自該列的任何值。我如何得到它接受的價值?c#登錄頁面從數據庫驗證

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace BrokerSolution 
{ 
    public partial class LogIn : Form 
    { 
     public static String User ; 
     public static String pass; 
     public LogIn() 
     { 
      InitializeComponent(); 

     } 

     private bool ValidateFunction(string User, string pass) 
     { 
      bool boolReturnvalue = false; 
      String strConnection = "Server=****; Database=*****; User Id=******; password=*****"; 
      SqlConnection UGIcon = new SqlConnection(strConnection); 
      String LogInQuery = "SELECT user_name, sign_in FROM Users"; 
      SqlCommand loginCommand = new SqlCommand(LogInQuery, UGIcon); 
      SqlDataReader dr; 
      UGIcon.Open(); 
      dr = loginCommand.ExecuteReader(); 

      while (dr.Read()) 
      { 
       if ((User == dr["user_name"].ToString()) & (pass == dr["sign_in"].ToString())) 
       { 
        boolReturnvalue = true; 
       } 

       dr.Close(); 
       return boolReturnvalue; 


      } 
      return boolReturnvalue; 
     } 
     private void button1_Click(object sender, EventArgs e) 
     { 
      User = UsernametextBox.Text; // 
      pass = PasswordtextBox.Text; 
      SqlDataReader dr; 
      if (User.Equals(_40029562DataSet.users.user_nameColumn.ToString())) 
      {new Dashboard().Show();} 
      else 
      { 
       new NewQuote().Show(); 
      } 



     } 




    } 
} 
+0

你得到所有列,使用類似於「SELECT user_name FROM Users WHERE sign_in = @password AND user_name = @username」,因此如果沒有返回任何內容,它們會提供錯誤的憑據 – Jonesopolis

+0

也會在找到命中時返回true在你的if語句中,while循環的其餘部分在這一點上是不必要的 – Jonesopolis

回答

0

嘗試把這個在您的按鈕子程序:

 User = UsernametextBox.Text; // 
     pass = PasswordtextBox.Text; 
     if (ValidateFunction(User,pass)) 
     {new Dashboard().Show();} 
     else 
     { 
      new NewQuote().Show(); 
     } 
0

是一個遠程主機上的數據庫?您很可能必須將您的IP添加到數據庫的白名單中,以便連接。幾周前我遇到了這個問題,甚至可以訪問表名和列名,但沒有記錄。

如果是本地數據庫,只需使用Windows身份驗證。否則,嘗試在Windows運行控制檯中進行telnet連接測試以嘗試ping服務器。