【问题标题】:The connection was not closed. The connection's current state is open ! asp.net c#连接未关闭。连接的当前状态是打开的! ASP.NET C#
【发布时间】:2017-09-21 21:42:15
【问题描述】:

我有 3 层网站 asp.net c#。我想选择用户并检查他的登录用户类型。但我的代码不起作用。和上面显示的错误。请帮我做什么。 我的代码 DAL:

public SqlDataReader select_user(string UserName)
        {
            connect.Open();
            SqlCommand cmd = new SqlCommand("SELECT * FROM UserInfo WHERE UserName=@UserName", connect);
            cmd.Parameters.AddWithValue("@UserName", UserName);
            SqlDataReader dr = cmd.ExecuteReader();
            return dr;
        }

和 BL:

 public SqlDataReader Get_user()
        {
            return da.select_user(UserName);
        }

及接口代码:

 try
        {

            bll.UserName = UserNameTextBox.Text;
            Session.Add("_UserName", bll.UserName);
            bll.Get_user();
            SqlDataReader dr = bll.Get_user();
            if (dr.HasRows)
            {
                dr.Read();
                int Utyp = bll.UserTyp;
                if (Utyp == 0)
                {
                    Session.Add("Msg_", "dear user. you are unactive yet");
                    Response.Redirect("ShowMessage.aspx", false);
                }
                else
                    if (Utyp == 1)
                    {
                        Response.Redirect("index.aspx", false);
                    }

            }
            else
            {

            }
        }
         catch (Exception ex)
         {
             Session.Add("Msg_", "  : <br>" + ex.Message);
             Response.Redirect("~/ShowMessage.aspx");
         }

【问题讨论】:

  • 你可以使用 using 语句来包装所有 ado.net 对象,如 using() {} 并且会小心关闭和处置对象
  • 答案对你有用吗@reza ?

标签: c# asp.net


【解决方案1】:
connect.Open();

应该改为:

if (connect.State == ConnectionState.Closed) {
    connect.Open();
}

确保它只尝试打开连接一次,而不是多次。

请注意,您可能还希望根据this answer 添加using 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多