我最近有兴趣为我的应用程序的登录托管我自己的数据库,因为我现在有一个提供程序,允许我使用他们已连接到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();
}
}
}
答案 0 :(得分:0)
首先,您应该使用随机盐而不是纯文本来存储密码字段。
您不需要通过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
从文本框传递。