ADO.NET, SQL Server e Stored Procedures
A mio avviso ADO.NET è una delle novità del Framework .NET più importanti. E' stato rinnovato, potenziato ed oggi è ancora più flessibile e completo rispetto al passato.
Ci consente di operare con qualsiasi base di dati semplicemente con poche semplici istruzioni.
Sapete che ADO.NET la versione contenuta nel Framework 1.0 mette a disposizione due namespace per l'accesso ai database:
- System.Data.OleDb (OLEDB .NET Data Provider)
- System.Data.SqlClient (SQL Server .NET Data Provider)
Con l'arrivo del
Framework 1.1 sono stati aggiunti e integrati altri pacchetti che prima erano disponibili per il download e che vanno a completare l'offerta con i seguenti namespace:
- System.Data.Odbc (ODBC .NET Data Provider)
- System.Data.OracleClient (Oracle .NET Data Provider)
Abbiamo visto quindi che c'è pieno supporto alle funzionalità offerte dal famoso RDBS SQL Server. Credo ormai tutti abbiano utilizzato almeno una volta le
Stored Procedures che permettono di spostare la
Business Logic della nostra soluzione a livello di Database.
Una cosa fondamentale delle Stored Procedures è sapere i parametri che accettano, il tipo e la direzione input o output, vedremo qui di seguito sia in VB.NET che in C# come si può ottenere questo risultato.
ADO.NET e il metodo DeriveParameters
Esiste un metodo particolare che ci permette di scoprire a Runtime tutti i parametri di una determinata Stored Procedures. Il metodo è
DeriveParameters. Dimostreremo l'esempio come già detto utilizzando Sql Server, ecco il codice:
N.B. Utilizzeremo come database il famoso Northwind e la Stored Procedure
"SalesByCategory"Codice C#
//Inizializzazione del SqlCommand e apertura della connessione
SqlCommand readCommand= new SqlCommand();
SqlConnection sqlconn= new SqlConnection("Server=localhost;Initial Catalog=northwind;Uid=sa;PWD=sa");
sqlconn.Open();
readCommand.Connection = sqlconn;
readCommand.CommandText = "SalesByCategory";
readCommand.CommandType = CommandType.StoredProcedure;
//attraverso il commandbuilder recupero i parametri
SqlCommandBuilder.DeriveParameters(readCommand);
//ciclo sulla collezione dei parametri
foreach(SqlParameter Par in readCommand.Parameters)
Console.WriteLine(Par.ParameterName + " " + Par.DbType.ToString() + " " + Par.Direction.ToString());
sqlconn.Close();
Codice VB.NET
'Inizializzazione del SqlCommand e apertura della connessione
Dim readCommand As New SqlCommand()
Dim sqlconn As New SqlConnection("Server=localhost;Initial Catalog=northwind;Uid=sa;PWD=sa")
sqlconn.Open()
readCommand.Connection = sqlconn
readCommand.CommandText = "SalesByCategory"
readCommand.CommandType = CommandType.StoredProcedure
'attraverso il commandbuilder recupero i parametri
Dim builder As New SqlCommandBuilder()
builder.DeriveParameters(readCommand)
'ciclo sulla collezione dei parametri
Dim Par As SqlParameter
For Each Par In readCommand.Parameters
Console.WriteLine(Par.ParameterName + " " + Par.DbType.ToString() + " " + Par.Direction.ToString())
Next
sqlconn.Close()
L'output di questo codice sarà il seguente:
@RETURN_VALUE Int32 ReturnValue@CategoryName String Input@OrdYear String Inpute naturalmente può essere personalizzato a piacimento per rispondere alle vostre esigenze e necessità.