Nelle ultime settimane sono diventato molto preoccupato che il modo in cui ho lavorato con le connessioni di database negli ultimi anni sia semplicemente sbagliato.
Creo esclusivamente una nuova connessione per ogni operazione di database che devo eseguire. solo nei programmi più complessi, avrei raggruppato diverse attività (comandi Sql) in background e quindi ogni pochi secondi avrei creato una nuova connessione singola, ed eseguirle con la stessa connessione.
Ecco un esempio tipico:
SqlConnection connection = new SqlConnection(con);
SqlCommand command = new SqlCommand(@"
DECLARE @Pk TABLE (Id int)
INSERT INTO Petrol.Reports(
[TimeStamp])
OUTPUT INSERTED.Id INTO @Pk
VALUES(
@TimeStamp)
SELECT Id FROM @Pk", connection);
command.CommandType = CommandType.Text;
SqlParameter parameter = command.Parameters.Add("@TimeStamp", SqlDbType.DateTime);
parameter.Value = this.TimeStamp;
using (connection)
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
this.Id = reader.GetInt32(0);
Ref.Petrol_ReportsById[Id] = this;
}
}
}
Recentemente ho iniziato a lavorare con PostgreSQL e sono stato caricato per vedere che crea un nuovo processo per quasi tutte le connessioni che creo.
L'accordo è che la maggior parte dei campioni di codice in giro usano un approccio molto simile, ma temo che questo sia solo per mantenere le cose semplici.
Considero che sto scrivendo il mio strumento di generazione di oggetti per condividere una singola connessione tra tutte le operazioni (tenendo presente la sicurezza dei thread), sarebbe un approccio corretto secondo te?