Non credo proprio che l'errore sia per questo.
Comunque ti do un consiglio:
non esporre metodi per aprire e chiudere la connessione, esponi solo quelli per eseguire chiamate. Il DB lo gestisci all'interno.

codice:
protected DataTable ExecuteSelect(string sSQL, IDataParameter[] procParams)
{
    SqlConnection cnx = null;
    SqlCommand cmd = null;
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter();

    try
    {
        cmd = new SqlCommand(sSQL);
        cmd.CommandType = CommandType.Text;
        da.SelectCommand = cmd;
        if (procParams != null)
        {
            for (int index = 0; index < procParams.Length; index++)
            {
                cmd.Parameters.Add(procParams[index]);
            }
        }

        cnx = new SqlConnection(GetConnectionString());
        cmd.Connection = cnx;
        cnx.Open();
        da.Fill(dt);
    }
    catch
    {
        throw;
    }
    finally
    {
        if (da != null) da.Dispose();
        if (cmd != null) cmd.Dispose();
        cnx.Dispose(); //Implicitly calls cnx.Close()
    }
    return dt;
}
Sarà .net a gestire e performare le connessione al db

Inoltre sono sono proprio sicuro che ti convenga fare una classe statica.