我想通过MySQL(数据库)登录我的程序。
string username = textBox1.Text.ToString();
int UserID = DB.runRead("SELECT id FROM users WHERE username='" + DB.Stripslash(username) + "'", null);
if (UserID > 0)
{
String[] UserData = DB.runReadRow("SELECT id, username, password, salt, rank, verein FROM benutzer WHERE id=" + UserID.ToString());
if(UserData[1].ToString().ToLower() == textBox2.Text.ToString().ToLower())
{
// logged in
SetStatusText("logged in!! :)");
SetProgressbarValue(100);
ButtonActivity(0, false);
}
else
{
// Password wrong
SetStatusText("wrong pw!!");
SetProgressbarValue(50);
}
}
else
{
SetStatusText("unregistered!!");
SetProgressbarValue(0);
}
我在其他一些项目中使用此方法。总是工作正常,但这一次,声明
if(UserID > 0)
由于UserID
的值为0,因此以下代码无法运行,我不知道原因。当然,数据库中有一个用户:
我已经尝试使用另一个数据库(新创建的),但错误仍然存在,所以我认为我在代码中做了一些愚蠢的事情。如果有必要,我可以发布工作代码,但我认为没有区别。
int UserID = DB.runRead("SELECT id FROM benutzer WHERE username='" + DB.Stripslash(Connection.Username) + "'", null);
if (UserID > 0)
{
string[] UserData = DB.runReadRow("SELECT id, username, password, salt, online, nickname, rank, firstlogin, bantime, anticheat FROM users WHERE id=" + UserID.ToString());
//Password = hashMD5(hashMD5(getBlock(3).ToLower()) + hashMD5(UserData[1]));
if (UserData[2].ToLower() == Password && UserData[9].ToString() == "1")
{
if (BanManager.isBlocked(UserID) == false /*&& RankManager.HasPermision(int.Parse(UserData[6]), "account.authorize")*/)
{
if (UserData[4].Equals("1"))
{
ReturnValue = LoginState.AlreadyLoggedIn;
Connection.send(new PACKET_SERVER_LIST(PACKET_SERVER_LIST.errorCodes.AlreadyLoggedIn));
//Log.WriteLine("Connection from " + Connection.IPAddress + " logged succesfull in as " + UserData[5] + " but the user is already online.");
Log.WriteLine("- Login - A Connection was successfully approved");
Log.WriteLine("- Login - IP Address: " + Connection.IPAddress + ",");
Log.WriteLine("- Login - Nickname: " + UserData[5] + ",");
Log.WriteLine("- Login - Status: The User is already logged in.");
Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine(new String('*', Console.WindowWidth)); Console.ForegroundColor = ConsoleColor.Gray;
}
等等。怎么了?
答案 0 :(得分:0)
这取决于runRead
内发生的事情。我还没有在C#中完成很多DB编程,但是我不知道这个调用是在任何标准类中,也不是在MySQL中。我可能错了,在哪种情况下随时教育我,我会抛弃这个答案。
我在我的搜索中找到了a piece of code,如下所示:
public static int runRead(string Query, object Tick) {
checkConnection();
try {
return Convert.ToInt32(new MySqlCommand(Query + " LIMIT 1", dbConnection).ExecuteScalar());
} catch {
return 0;
}
}
并且,如果那是您正在使用的那个,那么这可以解释为什么您会回归零 - 可能会发生一个例外情况,即您正在捕捉并忽略。
找出的一种方法是删除异常捕获,或在发生时记录合适的消息,假设您可以更改源。
您应该注意的另一件事是,您是否使用了数据库中不存在的用户名。由于查询将返回零行,因此我并不完全确定它将尝试使用第一行中的第一列"" ExecuteScalar()
试图获得。