我想開發C#應用程序,我想要登錄窗體連接到遠程服務器。我連接到服務器,但當我嘗試登錄時,行:MySqlDataReader reader = cmd.ExecuteReader();給我一個錯誤:未知列「admin」在where clause
你有什麼想法可以從哪裏來的問題?這裏是我的代碼:在C#應用程序的where子句中的未知列
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!");
}
}
}
1.你應該使用參數化查詢,而不是字符串連接。你很容易受到SQL注入的影響。 2.你不應該存儲明文密碼,你應該存儲密碼散列,並且每當有人輸入密碼時,你應該立即散列它,然後忽略明文密碼並且只比較兩個散列。 3.而不是返回查詢中的所有列,您應該返回count(*)。你只關心*如果*有一行有正確的用戶/密碼,而不是所有的信息。 – Servy
我假設你試圖用「admin」的用戶名登錄? – Tremmors
@Servy你可以給我舉個例子或者我可以看的地方 –