C# 沿着查询结果进行迭代(只读),但如果关闭连接或将其用于其他datareader或dataAdapter,则将丢失当前结果。要使用数据读取器,您需要一个活动连接。您可以使用dataAdapter并用结果填充DataTable。您都不能使用具有相同连接的嵌套数

C# 沿着查询结果进行迭代(只读),但如果关闭连接或将其用于其他datareader或dataAdapter,则将丢失当前结果。要使用数据读取器,您需要一个活动连接。您可以使用dataAdapter并用结果填充DataTable。您都不能使用具有相同连接的嵌套数,c#,mysql,mysqldatareader,C#,Mysql,Mysqldatareader,沿着查询结果进行迭代(只读),但如果关闭连接或将其用于其他datareader或dataAdapter,则将丢失当前结果。要使用数据读取器,您需要一个活动连接。您可以使用dataAdapter并用结果填充DataTable。您都不能使用具有相同连接的嵌套数据读取器。@maralfol我明白了,谢谢:)解决了我的问题。我给它一个+1的答案我想这再次说明了我之前的评论。如果要直接使用ADO,请直接使用ADO。如果您想要一个围绕ADO的包装器,请使用已经为您学习和整理过的许多现有包装器中的一个。


沿着查询结果进行迭代(只读),但如果关闭连接或将其用于其他datareader或dataAdapter,则将丢失当前结果。要使用数据读取器,您需要一个活动连接。您可以使用dataAdapter并用结果填充DataTable。您都不能使用具有相同连接的嵌套数据读取器。@maralfol我明白了,谢谢:)解决了我的问题。我给它一个+1的答案我想这再次说明了我之前的评论。如果要直接使用ADO,请直接使用ADO。如果您想要一个围绕ADO的包装器,请使用已经为您学习和整理过的许多现有包装器中的一个。
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        Page.Validate("Login");

        if (!IsValid)
        {
            return;
        }

        if (checkLogin())
        {
            Response.Redirect("Default.aspx");
        }
        else
        {
            lblErr.Text = "Invalid login attempt";
        }
    }

    protected Boolean checkLogin()
    {
        MySql db = new MySql();

        string sql = "select userid, firstname, lastname, ifnull(lastlogin, '') from users where email = @email and pass = @pass";

        List<MySqlParameter> args = new List<MySqlParameter>();
        args.Add(new MySqlParameter() { ParameterName = "@email", MySqlDbType = MySqlDbType.VarChar, Size = 100, Value = txtEmail.Text });
        args.Add(new MySqlParameter() { ParameterName = "@pass", MySqlDbType = MySqlDbType.VarChar, Size = 20, Value = txtPass.Text });

        MySqlDataReader dr = db.getReader(sql, args);

        if (dr.HasRows)
        {
            dr.Read();

            Session["userid"] = dr.GetInt32("userid");
            Session["firstname"] = dr.GetString("firstname");
            Session["lastname"] = dr.GetString("lastname");
            Session["lastlogin"] = dr.GetDateTime("lastlogin");

            dr.Close();

            return true;
        }
        else
        {
            return false;
        }
    }
public class MySql
{
    static string connStr = "data source=localhost; initial catalog=mail; user id=root; password=Ly@12157114;";
    MySqlConnection conn = new MySqlConnection(connStr);

    public MySqlDataReader getReader(string sql, List<MySqlParameter> args)
    {
        if (args.Count == 0)
        {
            return getReader(sql);
        }
        else
        {
            return getReader(sql, args.ToArray());
        }
    }
    public MySqlDataReader getReader(string sql, MySqlParameter[] args = null)
    {
        MySqlCommand cmd = new MySqlCommand(sql, conn);

        if (args != null)
        {
            cmd.Parameters.AddRange(args);
        }

        conn.Open();

        MySqlDataReader dr = cmd.ExecuteReader();

        conn.Close();

        return dr;
    }
}