我正在尝试开发C#app,我希望将登录表单连接到远程服务器。我连接到服务器但是当我尝试登录时,行:MySqlDataReader reader = cmd.ExecuteReader();给我一个错误:where clause
中的未知栏“admin”您是否知道问题出在哪里?这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace ECBSRecruitmentAgencySoftware
{
public partial class LogIn : Form
{
public LogIn()
{
InitializeComponent();
}
public bool tryLogin(string username , string password)
{
MySqlConnection con = new MySqlConnection("host=aaaaaaaa.baaadsg;user=saaaaaak;password=2333333336;database=soaaaaaaaa2;");
MySqlCommand cmd = new MySqlCommand("Select * FROM niki WHERE user_name = `" + username + "` AND user_password = `" + password + "`;");
cmd.Connection = con;
con.Open();
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read() != false)
{
if (reader.IsDBNull(0) == true)
{
cmd.Connection.Close();
reader.Dispose();
cmd.Dispose();
return false;
}
else
{
cmd.Connection.Close();
reader.Dispose();
cmd.Dispose();
return true;
}
}
else
{
return false;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (tryLogin(user.Text, pass.Text) == true)
{
MainScreen F2 = new MainScreen();
F2.Show();
this.Hide();
}
else
MessageBox.Show("Wrong details!");
}
}
}
答案 0 :(得分:3)
在使用'
而不是(`)
Select * FROM niki WHERE user_name = '" + username + "' AND user_password = '" + password + "'
答案 1 :(得分:3)
试试这个:
MySqlCommand cmd = new MySqlCommand("Select * FROM niki WHERE user_name = '" + username + "' AND user_password = '" + password + "'");
如果名称是保留名称,则引用表和列名称。例如。 tbl .from`将引用一个名为“from”的列,而不是SQL保留字FROM。
这就是你得到一条错误消息的原因,说明无效的列名“admin”,因为当MySQL在命令中找到`admin`时,他认为你正在引用一个名为“admin”的列。当然没有奖品可以猜测你输入“admin”作为登录表单中的用户名! :)
答案 2 :(得分:2)
使用命名参数代替您的解决方案:
MySqlCommand cmd = new MySqlCommand("Select * FROM niki WHERE user_name = @username AND user_password = @password");
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
UPD:更新为AddWithValue,因为UnhandledException表示