(C#)从SQL数据库读取用户名和密码以进行登录

时间:2017-04-08 02:06:46

标签: c# mysql database

我最近有兴趣为我的应用程序的登录托管我自己的数据库,因为我现在有一个提供程序,允许我使用他们已连接到MySQL数据库的面板。我做了一个小测试登录,看看我是否能弄清楚如何做到这一点。这是我的代码,我无法让它工作我继续登录失败我尝试了几种不同的方式,但任何帮助将不胜感激。我知道我已连接到数据库。出于隐私目的,我编辑了服务器IP和密码。这是我的数据库:http://prntscr.com/ettqn1

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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  1. 首先,您应该使用随机盐而不是纯文本来存储密码字段。

  2. 您不需要通过3个查询获取所有表Accounts,并且它们没有任何关系。 您如何知道与3个不同查询相对应的用户密码。

  3. 条件

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

    这意味着Accounts表格有UserNamePassword匹配,但也许它不属于一个人。

    1. 您只能使用1个查询来检查登录信息:

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

    2. 带参数的

      从文本框传递。

      参考链接:Store Password with hash