【发布时间】:2015-01-19 21:56:28
【问题描述】:
我正在使用本地 MySQL 数据库在 C# Visual Studio 中制作登录表单。但是,每次我输入信息时,它都会告诉我用户名和/或密码不正确,我知道这是错误的。 这是代码:
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 MySql.Data.MySqlClient;
namespace Dark_Heresy
{
public partial class Form1 : Form
{
private MySqlConnection connection = new MySqlConnection();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btn_Login_Click(object sender, EventArgs e)
{
try
{
String MyConnection = "datasource = localhost; port = 3306; username = root; password = Mypass;";
MySqlConnection MyConn = new MySqlConnection(MyConnection);
MySqlCommand SelectCommand = new MySqlCommand("SELECT * FROM dark_heresy.users WHERE users_='"+ this.TextUserName.Text + "' and password_='"+ this.TextPassword.Text + "';", MyConn);
MySqlDataReader MyReader;
MyConn.Open();
MyReader = SelectCommand.ExecuteReader();
int count = 0;
while (MyReader.Read())
{
count = count++;
}
if (count == 1)
{
MessageBox.Show("Connection Successful");
}
else if (count > 1)
{
MessageBox.Show("Duplication of Username and Password... Access Denied");
}
else
MessageBox.Show("Incorrect Username and/or Password");
MyConn.Close();
}
catch (Exception exp)
{
MessageBox.Show("Error: \r\n" + exp);
}
}
}
}
在 MySQL 工作台中它可以工作,当进行此查询时,它会向我显示“用户”及其“密码”:
SELECT * FROM dark_heresy.users WHERE users_='admin' and password_='adminpass';
连接工作正常,已经过测试,但总是得到“用户名和/或密码不正确”的结果。
【问题讨论】:
-
首先要解决的 问题是停止像这样创建 SQL - 改用参数化 SQL。请参阅bobby-tables.com 了解原因。接下来,停止将您的密码以明文形式存储在数据库中。理想情况下,使用其他人编写的身份验证系统...确实没有充分的理由将您自己的身份验证系统放在一起,而且您将用户的安全置于危险之中。
-
哦,对于需要计算记录数的类似情况,请考虑在查询中使用
COUNT并使用ExecuteScalar来执行它。 -
如果您不需要计数,只需检查是否存在行,请使用
EXISTS。 -
@JonSkeet 是的,我知道出于安全原因,我不应该将自己的密码放在一起,我首先使用密码加密的 mysql.user,因为它告诉我密码错误,我认为是因为它试图将其与加密版本进行比较,这就是为什么我刚刚与用户创建了一个“测试”表。出于安全原因,这个想法是回到 mysql.user。
标签: c# mysql visual-studio-2012 database-connection connection-string