ExecuteReader需要一个开放且可用的Connection Asp.net

时间:2014-01-27 21:21:29

标签: asp.net database database-connection

我的网站上有错误,当它在服务器上时。

  

System.Data ExecuteReader需要一个开放且可用的连接。   连接的当前状态是打开的

private static int OpenCon()
    {
        int degel = 0;
        try
        {
            ResetCon(true);
            if (con.State != ConnectionState.Open)
                con.Open();
            degel = -1;
        }
    catch (System.Data.SqlClient.SqlException ex)
    {
        CloseCon();
        if (ex.Errors[0].Number == 53)
        {

        }
    }
    return degel;
}

private static void CloseCon()
{
    if (con.State != ConnectionState.Closed)
        con.Close();
    if (cmd == null) 
        return; 
    else 
        cmd.Dispose();
}

private static SqlCommand CreateCmd(string sql, CommandType type)
{
    SqlCommand cmd = new SqlCommand();
    try
    {
        cmd.Connection = con;
        cmd.CommandType = type;
        cmd.CommandText = sql;
        cmd.CommandTimeout = 300;
    }
    catch
    {
        CloseCon();
    }
    return cmd;
}

 public static DataTable GetTable(string sql)
        {
            DataTable dt = new DataTable();
            try
            {
                OpenCon();
                SqlCommand cmd = CreateCmd(sql, CommandType.Text);
                adpt = new SqlDataAdapter();
                adpt.SelectCommand = cmd;
                adpt.Fill(dt);
                CloseCon();
            }
            catch (Exception ex)
            {
                CloseCon();
                Log.WriteLog("DataBase.GetTable()", ex, HttpContext.Current.Request);
            }
            return dt;
        }

谢谢, 哈尼

1 个答案:

答案 0 :(得分:1)

我认为这个错误在您的开发PC上无法重现,是吗?

您不应该使用静态连接,更不要使用ASP.NET。您的DB类只是这类令人讨厌的错误的来源。而是将using - 语句用于实现IDisposable的所有内容,例如连接,以确保它尽快关闭(即使出错)。

我不知道我能添加什么,因为这似乎是...的复制品。