Procedura: ottenere e impostare parametri per oggetti comando
Se gli oggetti comando vengono utilizzati per eseguire comandi in un database, le istruzioni SQL o le stored procedure eseguite richiedono spesso l'immissione di parametri. Nell'esempio seguente viene indicata una semplice istruzione Update nella quale sono richiesti parametri:
UPDATE Employees
SET LastName = @LastName, FirstName = @FirstName, BirthDate = @BirthDate
WHERE (EmployeeID = @EmployeeID)
Quando tale istruzione viene eseguita, è necessario fornire valori per tutti i parametri, ovvero @LastName, @FirstName, @BirthDate e @EmployeeID. Per eseguire questa operazione, si utilizzano gli oggetti parametro. Gli oggetti comando supportano un insieme di parametri, ad esempio Parameters, che contiene un set di oggetti del tipo SqlParameter, OleDbParameter, OdbcParameter o OracleParameter. Nell'insieme è presente un solo oggetto parametro per ciascun parametro da passare. Se, inoltre, si chiama una stored procedure, potrebbe essere richiesto un ulteriore parametro per accettare il valore restituito della stored procedure.
Nota
Se si utilizza un dataset, generalmente i comandi non vengono eseguiti direttamente ma passati alle query TableAdapter. Per ulteriori informazioni, vedere Procedura: riempire un dataset.
Impostazione dei valori di parametro
Prima di eseguire un comando, è necessario impostare un valore per ogni parametro del comando.
Per impostare il valore di un parametro
Per ciascun parametro dell'insieme di parametri del comando, impostare la proprietà Value.
Nell'esempio seguente viene illustrata l'impostazione dei parametri prima di eseguire un comando che fa riferimento a una stored procedure. Nell'esempio si presuppone che l'insieme di parametri sia stato già configurato con tre parametri denominati au_id, au_lname e au_fname. I singoli parametri vengono impostati in base al nome, per mettere in evidenza quale parametro viene impostato.
With oleDbCommand1 .CommandText = "UpdateAuthor" .CommandType = System.Data.CommandType.StoredProcedure .Parameters("au_id").Value = "172-32-1176" .Parameters("au_lname").Value = "White" .Parameters("au_fname").Value = "Johnson" End With OleDbConnection1.Open() oleDbCommand1.ExecuteNonQuery() OleDbConnection1.Close()
oleDbCommand1.CommandText = "UpdateAuthor"; oleDbCommand1.CommandType = System.Data.CommandType.StoredProcedure; oleDbCommand1.Parameters["au_id"].Value = "172-32-1176"; oleDbCommand1.Parameters["au_lname"].Value = "White"; oleDbCommand1.Parameters["au_fname"].Value = "Johnson"; oleDbConnection1.Open(); oleDbCommand1.ExecuteNonQuery(); oleDbConnection1.Close();
Acquisizione dei valori restituiti
Spesso le stored procedure passano nuovamente i valori all'applicazione che le ha chiamate.
Per ottenere i valori restituiti dalle stored procedure
Creare parametri la cui proprietà Direction è impostata su Output o InputOutput (se il parametro viene utilizzato nella procedura sia per ricevere sia per inviare valori). Assicurarsi che il tipo di dati del parametro corrisponda al valore restituito previsto.
Dopo avere eseguito la stored procedure, leggere la proprietà Value del parametro passato.
Per ottenere il valore restituito di una stored procedure
Creare parametri la cui proprietà Direction è impostata su ReturnValue.
Nota
È necessario che l'oggetto parametro relativo al valore restituito sia il primo elemento dell'insieme di parametri.
Assicurarsi che il tipo di dati del parametro corrisponda al valore restituito previsto.
Nota
Le istruzioni SQL Update, Insert e Delete restituiscono un intero che indica il numero di record sui quali viene eseguita l'istruzione. È possibile ottenere questo valore come valore restituito dal metodo ExecuteNonQuery. Per ulteriori informazioni, vedere Modifica di dati con le stored procedure (ADO.NET).
Nell'esempio seguente viene illustrato come ottenere il valore restituito di una stored procedure denominata CountAuthors. In questo caso si presuppone che il nome del primo parametro presente nell'insieme di parametri del comando sia "retvalue" e che il parametro sia configurato con la direzione ReturnValue.
Dim returnValue As Integer
oleDbCommand1.CommandText = "CountAuthors"
oleDbCommand1.CommandType = CommandType.StoredProcedure
oleDbConnection1.Open()
oleDbCommand1.ExecuteNonQuery()
oleDbConnection1.Close()
returnValue = CType(oleDbCommand1.Parameters("retvalue").Value, Integer)
MessageBox.Show("Return Value = " & returnValue.ToString())
int returnValue;
oleDbCommand1.CommandText = "CountAuthors";
oleDbCommand1.CommandType = CommandType.StoredProcedure;
oleDbConnection1.Open();
oleDbCommand1.ExecuteNonQuery();
oleDbConnection1.Close();
returnValue = (int)(oleDbCommand1.Parameters["retvalue"].Value);
MessageBox.Show("Return Value = " + returnValue.ToString());
Vedere anche
Attività
Procedura: creare ed eseguire un'istruzione SQL che restituisce righe
Procedura: creare ed eseguire un'istruzione SQL che restituisce un valore
Procedura: creare ed eseguire un'istruzione SQL che non restituisce valori
Procedura: eseguire una stored procedure che restituisce righe
Procedura: eseguire una stored procedure che restituisce un valore singolo
Procedura: eseguire una stored procedure che non restituisce valori
Concetti
Parametri di DataAdapter (ADO.NET)
Modifica di dati con le stored procedure (ADO.NET)