2016-08-13 3 views
1

phpmyadminのSQLデータベースに保存されているユーザー名とパスワードを使用して、C#を使用してプログラムにログインします。 これはこれまで私が持っていたものです。C#でMySQLデータを選択

private void button1_Click(object sender, EventArgs e) 
     { 
      MySqlConnection connection; 
      string server = "localhost"; 
      string database = "login"; 
      string uid = "root"; 
      string password = ""; 
      string connectionString; 
      connectionString = "SERVER=" + server + ";" + "DATABASE=" + 
      database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; 


      connection = new MySqlConnection(connectionString); 

      try 
      { 
       connection.Open(); 
       if (connection.State == ConnectionState.Open) 
       { 
        connection.Close(); 
        Form1 frm = new Form1(this); 
        frm.Show(); 
        Hide(); 
       } 
       else 
       { 
        MessageBox.Show("Database Connection Failed", "Epic Fail", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("An Error Occured, Try again later.", "Epic Fail", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk); 
      } 
     } 

しかし私は、有効なユーザー名とパスワードの両方が入力されるまで、それは、Form1を表示したくない、データベースに接続します。 私はSELECT * FROMを使用する必要があると推測していますが、私はそれについてどのように動くか正確には分かりません。クエリ

Select * from UsersTable Where Username='"+username+"' AND password='"+password+"' 

以下

+0

資格情報が正しくないと例外がスローされますので、 'キャッチ(例外の例)'ブロックを実行するかどう接続が失敗するを試してみてください。 – user3185569

答えて

4

nは、ユーザー名とパスワードが一致し

MySqlCommand cmd = dbConn.CreateCommand(); 
cmd.CommandText = "SELECT count(*) from tbUser WHERE UserName = @username and [email protected]"; 
command.Parameters.Add("@username", txtUserName.Text); 
command.Parameters.Add("@password", txtPassword.Text); 
var count = cmd.ExecuteScalar(); 

if(count>0) 
    //Logged In 

はちょうどあなたが

cmd.CommandText = "SELECT count(*) from tbUser WHERE UserName = '"+txtusernam +"'"; 

のようなクエリを使用する場合は

警告

SQLインジェクションに開放される、と言うことかどうかを確認するためにこの方法を使用します

Steveがコメントで述べたように、クリアテキストのパスワードは、文字列連結の同じ大きさの脆弱性です

+0

ちょうどここに警告を追加してください。平文のパスワードは、同じ大きさの文字列連結の脆弱性です。 – Steve

+0

@Steveありがとう。私はそれを私の答えに追加します –

+0

ありがとう、パスワードはハッシュされています。 – Lynnstrum

-2

使用次に、あなたがあなたのクエリが結果が含まれている場合は、その場合の条件を作ることができる(行)、その後、ユーザーが認証されたが(表に存在する)

注:選択クエリ月同じuserNameと複数のユーザーを取得し、パスワードは です。テーブル内でusersnameをユニークに保つことができます

+1

ストリングを教示しないでください。 – Steve

+1

@Steve ok sir、受け入れ、私を訂正してくれてありがとう –

+0

もちろんあなたには何もありません。この問題はとても拡散しているので、このアプローチを使用した回答を見たときには本当に気分が悪いです。私は今downvoteを削除することはできませんが、あなたはいつも答えを削除したり、問題を修正することができます(しかし、この時点であなたの答えは他のものと同じになります)。ごめんなさい。 – Steve

0

あなたはこの1

using(var con = new MysqlConnection{ ConnectionString = "your connection string " }) 
{ 
    using(var command = new MysqlCommand{ Connection = con }) 
    { 
     con.Open(); 

     command.CommandText = @"SELECT level FROM userTable WHERE [email protected], [email protected]"; 
     command.AddWithValue("@username", txtusername.Text); 
     command.AddWithValue("@password", txtpassword.Text); 

     var strLevel = myCommand.ExecuteScalar(); 

     if(strLevel == DBNULL.Value || strLevel == Null) 
     { 
      MessageBox.Show("Invalid username or password"); 
      return; 
     } 
     else 
     { 
      MessageBox.Show("Successfully login"); 
      hide(); // hide this form and show another form 
     } 

} 

}