2017-04-08 80 views
0

我最近有興趣爲我的應用程序的登錄託管我自己的數據庫,因爲我有一個提供程序允許我使用他們已經連接的面板一個MySQL數據庫。我做了一個簡單的測試登錄,看看我能否弄清楚如何去做。這是我的代碼,我沒有能夠得到它的工作,我一直在登錄失敗我已經嘗試了幾種不同的方式,但任何幫助將不勝感激。我知道我已連接到數據庫。我爲了隱私目的編輯了服務器IP和密碼。這是我的數據庫:http://prntscr.com/ettqn1(C#)從SQL數據庫中讀取用戶名和密碼以進行登錄

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using MetroFramework.Forms; 
using MetroFramework.Design; 
using MetroFramework; 
using MySql.Data.MySqlClient; 

namespace MySQL_Testing 
{ 
    public partial class Form1 : MetroForm 
    { 
     static MySqlConnection SqlConnection = new MySqlConnection("Server=MyServerAddress; Database=logins; Uid=root; Pwd=MyPass;"); 
     static string SqlQuerry = "SELECT Usernames FROM Accounts;"; 
     static string SqlQuerryPass = "SELECT Password FROM Accounts;"; 
     static string SqlQuerryID = "SELECT ID FROM Accounts;"; 
     static MySqlCommand cmd = new MySqlCommand(SqlQuerry, SqlConnection); 
     static MySqlCommand cmd2 = new MySqlCommand(SqlQuerryPass, SqlConnection); 
     static MySqlCommand cmd3 = new MySqlCommand(SqlQuerryID, SqlConnection); 


     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
     } 

     private void metroButton1_Click(object sender, EventArgs e) 
     { 
      SqlConnection.Open(); 
      //MySqlDataReader rdID = cmd3.ExecuteReader(); 
      //rdID.Close(); 
      MySqlDataReader rd = cmd.ExecuteReader(); 
      List<string> ReadUser = new List<string>(); 
      ReadUser.Add(Convert.ToString(rd.Read())); 
      rd.Close(); 
      MySqlDataReader rdPass = cmd2.ExecuteReader(); 
      List<string> ReadPass = new List<string>(); 
      ReadPass.Add(Convert.ToString(rdPass.Read())); 
      if (ReadUser.ToArray().ToString().Contains(metroTextBox1.Text) && ReadPass.ToArray().ToString().Contains(metroTextBox2.Text)) 
      { 
       MessageBox.Show("Login Successful"); 
      } 
      else 
      { 
       MessageBox.Show("Login Failed"); 
      } 
      rdPass.Close(); 
      SqlConnection.Close(); 
     } 
    } 
} 

回答

0
  1. 首先,你應該用隨機鹽哈希,存儲的不是純文本密碼字段。

  2. 您不需要通過3查詢獲取所有表Accounts,它們沒有任何關係。 你如何知道與3個不同查詢相對應的用戶密碼?

條件

ReadUser.ToArray().ToString().Contains(metroTextBox1.Text) && ReadPass.ToArray().ToString().Contains(metroTextBox2.Text) 

這意味着Accounts表有UserName和相匹配的Password但也許它並不屬於一個人。

  • 你可以只使用1個查詢,以檢查登錄信息:

    SELECT * FROM Accounts where UserName = @UserName and Password = @Password

  • 與參數是從你的文本通過。

    參考鏈接:Store Password with hash

    相關問題