C#Mysql的登录错误
问题描述:
我与C#(的Visual Studio 2012专业)和MySQL工作。我试图创建一个登录表单,其中用户需要输入用户名和密码:C#Mysql的登录错误
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 Login_Menu : Form
{
private MySqlConnection connection = new MySqlConnection();
public Login_Menu()
{
InitializeComponent();
TextPassword.PasswordChar = '*';
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btn_Login_Click(object sender, EventArgs e)
{
try
{
string connectionString = "datasource = localhost; port = 3306; username = root; password = Mypass;";
using(MySqlConnection myConn = new MySqlConnection(connectionString))
using(MySqlCommand selectCommand = new MySqlCommand())
{
selectCommand.CommandText = ("SELECT COUNT(1) FROM dark_heresy.users WHERE [email protected] and [email protected];");
selectCommand.Connection = myConn;
selectCommand.Parameters.Add(new MySqlParameter("User", MySqlDbType.VarChar).Value = TextUserName.Text);
selectCommand.Parameters.Add(new MySqlParameter("Password", MySqlDbType.VarChar).Value = TextPassword.Text);
myConn.Open();
var ret = selectCommand.ExecuteScalar();
var count = Convert.ToInt32(ret);
if (count == 1)
{
this.Hide();
Menu mn = new Menu();
mn.ShowDialog();
}
else if (count > 1)
{
MessageBox.Show("Duplication of Username and Password... Access Denied");
}
else
{
MessageBox.Show("Incorrect Username and/or Password");
}
}
}
catch (Exception exp)
{
MessageBox.Show("Error: \r\n" + exp);
}
}
}
}
我没有得到任何语法错误,但是当我运行这段代码我收到此错误:
MySql.Data.MySqlClient.MySqlException(0x80004005):
Only MySqlParameter objects may be stored at MySql.Data.MySqlClient.MySqlParameterCollection.Add(Object value)
at Dark_Heresy.Login_Menu.btn_Login_Click(Object sender, EventArgs e)
我知道的安全原因是使用mysql.user表而不是dark_heresy.users表进行用户检查是更好的主意,但现在是用于测试目的。 代码有什么问题? 它说是39行
答
一个错误,我认为你的参数的语法是错误的。
=
operator返回的只是分配右边的值代替也。这就是为什么;
new MySqlParameter("User", MySqlDbType.VarChar).Value = TextUserName.Text;
表达式返回TextUserName.Text
作为值和您的参数部分就会像;
selectCommand.Parameters.Add(TextUserName.Text);
正确的语法似乎;
selectCommand.Parameters.Add("@User", MySqlDbType.VarChar).Value = TextUserName.Text;
selectCommand.Parameters.Add("@Password", MySqlDbType.VarChar).Value = TextPassword.Text;
并请不要将您的密码保存为纯文本。
谢谢soooo多!!!你只是保存了一天 – 2014-11-25 11:10:18
正如我前面所描述的那样,我将会研究这只是为了测试目的,之后我会处理安全 – 2014-11-25 11:17:45
@DanielS。乐意效劳。 – 2014-11-25 11:41:33