27.06.2014 Views

Informatica Medica Prof. Mauro Giacomini Anno Accademico 2013-2014

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!