2011-12-06 200 views
0

我想在C#中用MySQL做一个登录代码。基本上用户输入用户名和密码,然后代码检查数据库密码是否正确。我无法从数据库中读取代码......这就是我所处的位置。MySQL密码登录码?

public string strUsername; 
public string strPassword; 


//Connect to DataBase 
MySQLServer.Open(); 

//Check Login 
MySqlDataReader mySQLReader = null; 
MySqlCommand mySQLCommand = MySQLServer.CreateCommand(); 
mySQLCommand.CommandText = ("SELECT * FROM user_accounts WHERE username =" +strUsername); 
mySQLReader = mySQLCommand.ExecuteReader(); 
while (mySQLReader.Read()) 
{ 
    string TruePass = mySQLReader.GetString(1); 
    if (strPassword == TruePass) 
    { 
    blnCorrect = true; 
    //Get Player Data 
    } 
} 

MySQLServer.Close(); 

从我在过去所做的那样,我认为这会工作,但如果我打印出来,它看起来似乎没有被读取。我对MySQL还是比较新的,所以任何帮助都会很棒。

+1

是什么调试器告诉你吗? –

+0

请看这里:http://xkcd.com/327/ – albertjan

回答

3

非数字字段值必须用单引号括起来。

mySQLCommand.CommandText = "SELECT * FROM user_accounts WHERE username ='" +strUsername + "'"; 
mySQLCommand.Connection=MySQLServer; 

,但你必须使用Parameters防止SQL Injection

mySQLCommand.CommandText = "SELECT * FROM user_accounts WHERE username [email protected]"; 
mySQLCommand.Connection=MySQLServer; 
mySQLCommand.Parameters.AddWithValue("@username",strUsername); 
+1

还应该建议OP在GetString(1)中不要硬编码密码的序号位置,除非select语句指定了这样的位置。 –

+0

谢谢你生病了试试看。如果我有任何问题,我会告诉你。 – Dusty

-2
 string con_string = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Database.mdf;Integrated Security=True;User Instance=True"; 
     string query = "SELECT * FROM Users WHERE UseName='" + txtUserName.Text.ToString() + "' AND Password='" + txtPassword.Text + "'"; 
     SqlConnection Con = new SqlConnection(con_string); 
     SqlCommand Com = new SqlCommand(query, Con); 
     Con.Open(); 
     SqlDataReader Reader; 
     Reader = Com.ExecuteReader(); 

     if (Reader.Read()) 
     { 
      lblStatus.Text="Successfully Login"; 
     } 
     else 
     { 
      lblStatus.Text="UserName or Password error"; 
     } 
     Con.Close(); 

正如AVD说,你应该用参数来防止SQL注入....

+0

显示如何使用参数是你说OP应该做的。 Ans为什么比较DB中的字符串不是代码。 – albertjan

+0

@ m.qayyum - 你发布的代码不会阻止sql注入.... –

+0

我曾经说过它会阻止sql注入。我刚刚展示了如何验证登录...阅读我的最后一行... –