Informatica Medica Prof. Mauro Giacomini Anno Accademico 2013-2014
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Informatica</strong> <strong>Medica</strong><br />
<strong>Prof</strong>. <strong>Mauro</strong> <strong>Giacomini</strong><br />
<strong>Anno</strong> <strong>Accademico</strong> <strong>2013</strong>-<strong>2014</strong>
Sommario<br />
• definizione di stored procedure<br />
• stored procedure che restituiscono record<br />
• passaggio di parametri<br />
• stored procedure che NON restituiscono record
Definizione di Stored Procedure<br />
• Una stored procedure è una sequenza di istruzioni SQL<br />
memorizzate in un database server;<br />
• si usa quando le modifiche da apportare ad un DataSet<br />
sono più complesse di un semplice aggiornamento<br />
(per il quale basta un oggetto DataAdapter);<br />
• consentono un maggior livello di sicurezza per il<br />
database;<br />
• possono restituire o meno record.
Stored Procedure che restituiscono<br />
record (1)<br />
• Per invocare una stored procedure occorre creare un<br />
oggetto Command, associarlo ad una connessione,<br />
impostare la proprietà CommandText al nome della<br />
stored procedure e assegnare alla proprietà<br />
CommandType il valore<br />
CommandType.StoredProcedure.<br />
• Poniamo di avere la seguente stored procedure :<br />
Procedure ListaCategorie As<br />
SELECT IDCategoria, NomeCategoria<br />
FROM Categorie
Stored Procedure che restituiscono<br />
record (2)<br />
• Il seguente codice utilizza un oggetto Connection e un<br />
oggetto DataAdapter per invocare la stored procedure<br />
ListaCategorie:<br />
Dim da as New SqlDataAdapter<br />
da.SelectCommand = New SqlCommand()<br />
da.SelectCommand.Connection = Conn<br />
da.SelectCommand.CommandText = “ListaCategorie”<br />
da.SelectCommand.CommandType =<br />
CommandType.StoredProcedure
Stored Procedure che restituiscono<br />
record (3)<br />
• A questo punto per eseguire la stored procedure, è<br />
sufficiente invocare il metodo Fill dell’oggetto<br />
SQLDataAdapter:<br />
da.Fill(Ds, “Categorie”)<br />
• Dopo aver invocato la stored procedure, avremo quindi nel<br />
DataSet Ds un oggetto DataTable individuato dalla stringa<br />
“Categorie” che si può gestire come un qualsiasi DataTable.
Passaggio di parametri (1)<br />
• Usando le stored procedure è possibile passare dei parametri in<br />
modo da personalizzare l’esecuzione della procedura.<br />
• Gli oggetti Parameter rappresentano i valori da passare alla<br />
stored procedure al momento dell’invocazione.<br />
• Le possibili direzioni per i parametri di una stored procedure<br />
sono:<br />
-Input: si inviano valori alla stored procedure<br />
-Output: la stored procedure restituirà un valore in questo<br />
parametro<br />
-InputOutput: possibilità di inviare dei dati alla stored procedure<br />
e ricevere dei risultati<br />
-ReturnValue: indica il parametro in cui la stored procedure<br />
memorizzerà l’eventuale valore di ritorno.
Passaggio di parametri (2)<br />
• L’oggetto Parameter deve avere lo stesso nome e tipo di<br />
dato previsto dalla stored procedure.<br />
• Dopo aver creato l’oggetto Parameter occorre impostare la<br />
sua proprietà direction.<br />
• Poniamo di avere la seguente stored procedure:<br />
Procedure ProdottiPerCategoria(@IDCategoria int)<br />
As<br />
SELECT IDProdotto, Descrizione, CostoUnitario<br />
FROM Prodotti<br />
WHERE IDCategoria = @IDCategoria
Passaggio di parametri (3)<br />
• La stored procedure accetta un parametro di tipo intero che<br />
rappresenta l’identificativo della categoria dei prodotti.<br />
• Vediamo come invocare questa stored procedure nella<br />
nostra applicazione:<br />
da As New SQLDataAdapter(“ProdottiPerCategoria”,<br />
Conn)<br />
da.SelectCommand.CommandType =<br />
CommandType.StoredProcedure<br />
Dim Param As New SQLParameter (“@IDCategoria”,<br />
SQLDbType.Int)<br />
Param.Direction = ParameterDirection.Input<br />
Param.Value = 40
Passaggio di parametri (4)<br />
• A questo punto l’oggetto preparato deve essere associato<br />
alla stored procedure, ciò avviene aggiungendolo alla<br />
collection Parameters dell’oggetto SelectCommand:<br />
Da.SelectCommand.Parameters.Add(Param)<br />
• Se la stored procedure prevede più parametri essi vengono<br />
inseriti nella collection uno dopo l’altro.<br />
• Quindi l’inserimento del risultato della stored procedure in<br />
un DataSet segue l’approccio standard:<br />
Dim Ds as New DataSet<br />
da.Fill(Ds, “Prodotti”)
Stored Procedure che non<br />
restituiscono record (1)<br />
• Le stored procedure possono anche eseguire delle azioni di<br />
modifica, cancellazione o aggiunta di record, quindi senza<br />
restituire nessun insieme di record.<br />
• In questo caso per eseguirle si utilizzano direttamente gli<br />
oggetti Command e il metodo ExecuteNonQuery.<br />
• Poniamo di avere la seguente stored procedure:<br />
Procedure NumeroOrdini(@IDCliente int, @NOrdini<br />
int OUTPUT)<br />
As<br />
SELECT @NOrdini = COUNT(IDOrdine)<br />
FROM Ordini<br />
WHERE IDCliente = @IDCliente
Stored Procedure che non<br />
restituiscono record (2)<br />
Dim cmd as New SQLCommand(“NumeroOrdini”, Conn)<br />
cmd.CommandType = CommandType.StoredProcedure<br />
Dim Param1 as New SQLParameter(“@IDCliente”,<br />
SQDbType.int)<br />
Param1.Direction = ParamDirection.Input<br />
Param1.Value = 12<br />
cmd.Parameters.Add(Param1)<br />
Dim Param2 as New SQLParameter(“@NOrdini”,<br />
SQLDbType.int)<br />
Param2.Direction = ParamDirection.Output<br />
Cmd.Parameters.Add(Param2)<br />
Conn.Open()<br />
cmd.ExecuteNonQuery()<br />
Conn.Close()
Stored Procedure che non<br />
restituiscono record (3)<br />
• Da notare che l’esecuzione del metodo ExecuteNonQuery<br />
richiede che la connessione sia aperta.<br />
• Si può utilizzare direttamente la collection Parameters per<br />
accedere al valore restituito da una stored procedure in un<br />
parametro di output, ad esempio:<br />
n = cmd.Parameters(“@NOrdini”).Value