C# 如何从另一列中选择结果为的值

C# 如何从另一列中选择结果为的值,c#,mysql,C#,Mysql,我正在使用C语言,我需要为mysql用户和密码开发一个检查系统。 到目前为止,我想到的是这个,我得到的错误是,这是错误的语法 public bool VerifyUser(string username, string password) { string returnValue = ""; string Query = "SELECT Pass FROM Base_Character WHERE User='" + username + "'"; MySqlComm

我正在使用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;
    }
}
ExecuteOnQuery用于删除、插入和更新。每当您希望从数据库中以行的形式返回数据时,请使用ExecuteReader

您的查询应该同时检查用户名和密码,如果它们存在于一条记录中,则返回该行,否则不返回任何内容

您还需要了解更多关于使用.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
}

谢谢大家,但这需要一个mysql无法保存或处理的自定义加密,我的主要错误是ovrlooking the ExecuteOnQuery,所以我不得不这样编写代码:

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);
        }

我该怎么做:进行查询以检查用户和密码。如果您得到一个结果,您将知道提供了正确的密码,如果没有,那么您将知道密码是错误的。这样,您就不必担心返回值了。还有,你收到了什么错误消息?编译器错误在哪一行?我不知道MySQL有什么可以帮助你的,但是你应该认真阅读这篇文章,因为你的代码有遭受SQL注入攻击的危险…还有你的最后一个if块是向后的,除非您希望在密码匹配时返回false。不需要此行verifyUser.ExecuteOnQuery;您仍然有command.ExecuteNonQuery;虽然您建议这是一个错误,但我建议您检查如何重新显示异常:forwhile myReader.Read!=错误的有一种更简单的方式来表达,也有一种更好的方式。如果myReader.Read{}。你的版本读了三遍。