ExecuteReader需要一个开放且可用的连接,但连接已打开且无法正常工作

时间:2017-10-20 10:57:32

标签: c# sql asp.net

我有一个登录表单。我的查询在我的数据库中运行并交叉检查输入的参数是否与数据库中的参数匹配,然后将您重定向到页面。我在我的代码中添加了一个条件,以便在连接打开或关闭时捕获异常。我曾尝试查找像one这样的解决方案。

我做了以下事情。

  • 包括使用

但是它仍然在运行时显示此错误

  

ExecuteReader需要一个开放且可用的连接。连接的当前状态已关闭。

这是我的代码:

public void LWAPLogin(string username, string password)
    {
        string wrongCredentials = "Username does not exist. Or password is incorrect";
        string query = "Select Username, Password from LWAP where Username=@user AND Password=@password;";
        using (SqlCommand command = new SqlCommand(query, Connect.con))
        {
            command.Parameters.Add("@user", SqlDbType.VarChar, 50).Value = username;
            command.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = password;

            try
            {
                if (connection.con.State == ConnectionState.Open)
                {
                    using (SqlDataReader dr = command.ExecuteReader())
                    {
                        if (dr.Read())
                            Response.Redirect("LWAPHome.aspx");
                        else
                            ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + wrongCredentials + "');", true);

                        dr.Close();
                    }
                    connection.con.Close();
                }


                else if (connection.con.State == ConnectionState.Closed)
                {
                    connection.con.Open();


                    using (SqlDataReader dr = command.ExecuteReader())
                    {
                        if (dr.Read())
                            Response.Redirect("LWAPHome.aspx");
                        else
                            ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + wrongCredentials + "');", true);
                        dr.Close();
                    }
                    connection.con.Close();

                }
            }
            finally
            {
                //connection.con.Open();
            }
        }

    }

从其他程序员那里获得建议后。我改变了我的代码,问题得到解决。但是现在我有一个新问题。当一切都很好但它不是重定向到新页面。只是将页面URL更改为所需页面,但保留在登录页面上。

以下是我编辑的代码:

public void LWAPLogin(string username, string password)
    {
        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["tlcString"].ConnectionString))
        {
            string wrongCredentials = "Username does not exist. Or password is incorrect";
            string query = "Select Username, Password from LWAP where Username=@user AND Password=@password;";
            using (SqlCommand command = new SqlCommand(query, con))
            {

                command.Parameters.Add("@user", SqlDbType.VarChar, 50).Value = username;
                command.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = password;

                con.Open();

                using (SqlDataReader dr = command.ExecuteReader())
                {
                    if (dr.Read())
                        Response.Redirect("LWAPHome.aspx");
                    else
                        ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + wrongCredentials + "');", true);

                    dr.Close();
                }
                //connection.con.Close();
            }
            con.Close();

        }
    }

请参阅image,了解它现在显示的错误。我尝试使用不同的浏览器,但他们都做同样的事情。

1 个答案:

答案 0 :(得分:1)

您正在创建一个新的SqlCommand(查询,Connect.con))指定 Connect.con 作为要使用的连接,而您正在检查 connection.con ,一个不同的SqlConnection实例。如果你确实想要检查任何东西,请确保你正在检查正确的事情。