Utilizzando la classe DataReader possiamo specificare alcune opzioni aggiuntive al momento dell'accesso ai dati.
Vediamo innanzitutto il codice utilizzato per popolare un DataGrid da un database Access a cui accedere sfruttanod OleDb:
dim str_conn = "Provider=..." dim datareader as OleDbDataReader dim conn as new OleDbConnection(str_conn) dim command as new OleDbCommand("select * from tabella", conn) conn.Open() datareader = command.ExecuteReader() DataGrid1.DataSource = datareader conn.Close()
ExecuteReader permette l'utilizzo di un parametro opzionale, chiamato CommandBehavior:
'chiude la connessione al database dopo la chiusura del datareader CommandBehavior.CloseConnection ' prende solo il primo record dal database CommandBehavior.SingleRow ' lettura sequenziale dei campi del record, comodo per dati di dimensioni importanti, ad esempio in formato binario CommandBehavior.SequentialAccess ' esegue solo una query al database CommandBehavior.SingleResult ' informazioni sulle primary key della tabella CommandBehavior.KeyInfo 'informazioni sulla strutta della tabella CommandBehavior.SchemaOnly
In questo breve spazio prenderemo solo in considerazione le prime due opzioni, che sono poi le più utili.
Se eseguiamo il codice qui sopra, otterremo come risultato l'intero contenuto della nostra tabella. Se specifichiamo l'opzione "SingleResult" per l'ExecuteReader, invece, otterremo solo il primo record della nostra tabella, proprio come se eseguissimo la query "select top 1 * from Tabella".
... datareader=command.ExecuteReader(CommandBehavior.SingleResult) ...
Specificando l'opzione "CloseConnection", dopo il popolamento del datagrid, la connessione sarà chiusa immediatamente:
conn.Open() datareader = command.ExecuteReader(CommandBehavior.CloseConnection) DataGrid1.DataSource = datareader ' conn.Close() <- questa riga non è più necessaria.
Possiamo unire le due opzioni, per ottenere il primo record e la chiusura immediata della connessione per avere il massimo delle prestazioni:
datareader=command.ExecuteReader(CommandBehavior.SingleResult or CommandBehavior.CloseConnection)
Equivalente in C# a:
datareader=command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection);
L'utilizzo dell'opzione CloseConnection è molto utile anche nel passaggio di un DataReader tra più strati di un'applicazione. Possiamo creare una funzione in un classe separata che ci restituisce un datareader che chiuderà automaticamente la connessione alla fine delle nostre operazioni:
function GetData() as OleDbDataReader dim str_conn="Provider=..." dim datareader as OleDbDataReader dim conn as new OleDbConnection(str_conn) dim command as new OleDbCommand("select * from tabella",conn) conn.Open() datareader=command.ExecuteReader(CommandBehavior.CloseConnection) return datareader end function sub Page_Load() DataGrid1.DataSource=GetData() DataGrid1.DataBind() end sub
In questo esempio, grazie all'utilizzo del CommandBehavior, ci assicuriamo che alla fine del popolamento del datagrid, la connessione verrà chiusa senza impegnare ulteriormente le risorse del server.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Windows DNA Parte prima
- Microsoft Visual Studio Code: un nuovo editor gratuito per Windows, MacOSX e Linux per sviluppatori ASP.NET e Node.js
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- Realizzare una Progressive Web Application con Blazor e ASP.NET Core
- ASP.NET 4.0 AJAX arriva alla Preview 5, in attesa della beta2 di ASP.NET 4.0
- Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
- IISControl: come comandare IIS
- Preview 2 di ASP.NET MVC 2.0 ed una nuova versione per AJAX Control Toolkit
- Docker e ASP.NET Core: portare i nostri siti web su container
- Abilitare e gestire il prerendering nelle applicazioni Blazor WebAssembly