Home Page Home Page Tips & Tricks Come recuperare i parametri da una Stored Procedure con ADO.NET ?

Come recuperare i parametri da una Stored Procedure con ADO.NET ?


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#


Codice .NET n°1
 //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



Codice .NET n°2
 '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 Input

e naturalmente può essere personalizzato a piacimento per rispondere alle vostre esigenze e necessità.
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5