Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Metodo migliore per gestire connessioni a database

    Ciao a tutti! Nella mia applicazione ASP.NET ho creato una classe statica con dei metodi statici che leggono i dati dal database e li restituiscono al chiamante sotto forma di classi. Fin qui tutto bene, il problema viene alla gestione della connessione al db. Nella classe statica ho inserito due metodi: Open e Close rispettivamente per aprire e chiudere la connessione. La procedura di lettura dati avviene in questo modo:

    1. Apertura connessione con il metodo della classe statica
    2. Chiamata del metodo di lettura dati della classe statica
    3. Chiusura connessione con il metodo della classe statica

    Il problema viene quando ad esempio nel sito ci sono due utenti: il primo utente si trova tra i punti 1 e 2 e invece il secondo utente si trova al punto 3. In questo modo il secondo utente mi chiude la connessione che ha aperto il primo utente e quindi quando il primo utente va a leggere i dati dal db ottiene un errore.

    Come posso evitare ciò? Non so se ho esposto chiaramente quale è il problema.
    Lunga vita e prosperità!!
    Usa Mozilla! http://www.mozilla.com

  2. #2
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.