1

我有一个这样的示例表格:

图片

dbconnect用 select 方法创建了类,它是这样的:

public List<string>[] Select(string username, string password)
{
    string query = "SELECT * FROM ms_user where username = '" + username + 
        "' and password = '" + password + "'";

    //Create a list to store the result
    List<string>[] list = new List<string>[2];
    list[0] = new List<string>();
    list[1] = new List<string>();           

    //Open connection
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Create a data reader and Execute the command
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            list[0].Add(dataReader["username"] + "");
            list[1].Add(dataReader["password"] + "");                    
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();

        //return list to be displayed
        return list;
    }
    else
    {
        return list;
    }
}

如何使用此方法登录?因为该方法返回一个列表而不是true检查false数据库中是否存在该值。

4

4 回答 4

1
Boolean loginSuccessful = Select(username, password).Count > 0;

但是,请查看有关如何在数据库中存储密码(例如,这个)和 SQL 注入(例如,这个)的资源。

于 2013-03-14T08:24:59.183 回答
0

我认为与其直接回答您的问题(因为这很简单——如果找不到用户,您只需返回 null 而不是 List),您最好获取一些资源来获取更多阅读材料。

如果您阅读一些有关 SQL 注入的信息,我认为您会特别受益: http ://www.unixwiz.net/techtips/sql-injection.html

之后阅读以下教程 - 它非常好:http: //zetcode.com/db/mysqlcsharptutorial/

最后,我建议至少在您获得一些经验之前,在将值传递到 SQL 时始终坚持使用 MySqlParameter。在 StackOverflow -> Parameterized Query for MySQL with C#上查看这个问题

于 2013-03-14T08:34:41.650 回答
0

我会在阅读器中添加一个变量,只要找到并匹配用户帐户,该变量就会增加。

    x int = 0;
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Create a data reader and Execute the command
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            list[0].Add(dataReader["username"] + "");
            list[1].Add(dataReader["password"] + ""); 
            x++;
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();

        //return list to be displayed
        return x;
    }

然后,在您的应用程序中使用控制结构来检查 x > 0。如果是,请登录用户。

于 2013-03-14T08:22:53.643 回答
0

哇,看来您需要学习构建查询和 sql 注入。

还有密码、哈希、加密和盐。

然后异常。

然后删除不适合类型语言的(+“”),并且在大多数情况下都是糟糕的形式。

然后 == true 测试是不好的风格,多余的。

于 2013-03-14T08:24:15.540 回答