0

私は C# を使用しており、mysql ユーザーとパスワードのチェック システムを開発する必要があります。これまでのところ、私が思いついたのはこれであり、私が得るエラーは、それが間違った構文であるということです...

public bool VerifyUser(string username, string password)
{
    string returnValue = "";

    string Query = "SELECT Pass FROM Base_Character WHERE User='" + username + "'";

    MySqlCommand verifyUser = new MySqlCommand(Query, this.sqlConn);

    try
    {
        verifyUser.ExecuteNonQuery();

        MySqlDataReader myReader = verifyUser.ExecuteReader();

        while (myReader.Read() != false)
        {
            returnValue = myReader.GetString(0);
        }

        myReader.Close();
    }
    catch (Exception excp)
    {
        Exception myExcp = new Exception("Could not verify user. Error: " +
            excp.Message, excp);
        throw (myExcp);
    }

    if (returnValue == password)
    {
        return false;
    }
    else
    {
        return true;
    }
}
4

2 に答える 2

0

ExecuteNonQueryDELETE、INSERT、および UPDATE 用です。データベースからデータを行として返したいときはいつでも、使用しますExecuteReader

クエリは、ユーザー名とパスワードを一緒にチェックする必要があります。それらが 1 つのレコードに存在する場合、行が返されます。それ以外の場合は何も返されません。

.Net を使用したコーディング/データベース プログラミングについてさらに学ぶ必要があります。

public bool VerifyUser(string username, string password)
{
    bool returnValue = false;
    string Query = "SELECT 1 FROM Base_Character WHERE User='" + username + "' AND pass='"+password+"'";

    try
    {
        MySqlCommand command = new MySqlCommand(Query, this.sqlConn);

        MySqlDataReader myReader = command.ExecuteReader();

        if(myReader.Read())
        {
            returnValue = true;
        }

        myReader.Close();
    }
    catch (Exception excp)
    {
        throw;
    }

    return returnValue;
 }

ブール値を使用しているため、おそらくカスタム例外をスローしないでください

if(VerifyUser("user123", "******"))
{
   //Congratulations
}
else
{
   //Unable to log you in
}
于 2012-10-10T20:13:45.447 に答える
0

みんなありがとう、しかし、これはmysqlが保持または処理できないカスタム暗号化を必要とします.私の主なエラーはexecutenonquery()を見ていたので、次のようなコードを作成する必要がありました.

if (AuthorizeTools.Encrypt.Password(Database.getPassword) != Password) //Password is already encrypted

次に、mysql 関数を次のように設定します。

public string getPassword(string username)
        {
            string returnValue = "";
            string Query = "SELECT Pass FROM Base_Character where (User=" +
                "'" + username + "') LIMIT 1";

            MySqlCommand checkUser = new MySqlCommand(Query, this.sqlConn);

            try
            {
                checkUser.ExecuteNonQuery();

                MySqlDataReader myReader = checkUser.ExecuteReader();

                while (myReader.Read() != false)
                {
                    returnValue = myReader.GetString(0);
                }

                myReader.Close();
            }
            catch (Exception excp)
            {
                Exception myExcp = new Exception("Could not grab password: " +
                    excp.Message, excp);
                throw (myExcp);
            }
            return (returnValue);
        }
于 2012-10-15T21:08:31.430 に答える