Parametri DataAdapter
Si applica a: .NET Framework .NET .NET Standard
DbDataAdapter dispone di quattro proprietà che consentono di recuperare e aggiornare i dati dell'origine dati. La proprietà SelectCommand restituisce i dati dall'origine dati, mentre le proprietà InsertCommand, UpdateCommand e DeleteCommand vengono usate per gestire le modifiche nell'origine dati.
Nota
La proprietà SelectCommand
deve essere impostata prima di chiamare il metodo Fill
di DataAdapter
. È necessario impostare la proprietà InsertCommand
, UpdateCommand
o DeleteCommand
prima di chiamare il metodo Update
di DataAdapter
a seconda delle modifiche apportate ai dati in DataTable, Se ad esempio sono state aggiunte righe, è necessario impostare la proprietà InsertCommand
prima di chiamare Update
. Quando Update
elabora una riga inserita, aggiornata o eliminata, DataAdapter
usa la rispettiva proprietà Command
per l'operazione. Le informazioni correnti sulla riga modificata vengono passate all'oggetto Command
mediante la raccolta Parameters
.
Quando si aggiorna una riga nell'origine dati, si chiama l'istruzione UPDATE, che usa un identificatore univoco per identificare la riga della tabella da aggiornare. In genere, il valore dell'identificatore univoco corrisponde a quello del campo di una chiave primaria. Nell'istruzione UPDATE vengono usati i parametri che contengono sia l'identificatore univoco che le colonne e i valori da aggiornare, come illustrato nell'istruzione Transact-SQL seguente.
UPDATE Customers SET CompanyName = @CompanyName
WHERE CustomerID = @CustomerID
Nota
La sintassi per i segnaposto dei parametri varia in base all'origine dati. In questo esempio vengono mostrati i segnaposto per un'origine dati SQL Server.
In questo esempio il campo CompanyName
viene aggiornato con il valore del parametro @CompanyName
nella riga in cui CustomerID
è uguale al valore del parametro @CustomerID
. Le informazioni della riga modificata vengono recuperate dai parametri usando la proprietà SourceColumn dell'oggetto SqlParameter. Di seguito sono riportati i parametri della precedente istruzione UPDATE di esempio. Nel codice si presuppone che la variabile adapter
rappresenti un oggetto SqlDataAdapter valido.
// Assumes that connection is a valid SqlAdapter object
adapter.UpdateCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 15, "CompanyName");
SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;
Il metodo Add
della raccolta Parameters
accetta il nome del parametro, il tipo di dati, le dimensioni (se applicabili al tipo) e il nome dell'oggetto SourceColumn da DataTable
. Notare che la proprietà SourceVersion del parametro @CustomerID
è impostata su Original
. Questo valore assicura che l'aggiornamento della riga esistente nell'origine dati venga eseguito se il valore della colonna o delle colonne identificative è stato cambiato nell'oggetto DataRow modificato. In questo caso il valore Original
della riga corrisponde al valore corrente nell'origine dati e il valore Current
della riga contiene il valore aggiornato. SourceVersion
non è impostato per il parametro @CompanyName
, pertanto verrà usato il valore di riga Current
predefinito.
Nota
Per entrambe le operazioni Fill
dei metodi DataAdapter
e Get
di DataReader
, il tipo .NET viene dedotto dal tipo restituito dal provider di dati Microsoft SqlClient per SQL Server. I tipi .NET dedotti e i metodi delle funzioni di accesso per i tipi di dati Microsoft SQL Server sono descritti in Mapping dei tipi di dati in ADO.NET.
Parameter.SourceColumn e Parameter.SourceVersion
È possibile passare SourceColumn
e SourceVersion
come argomenti del costruttore Parameter
o impostarli come proprietà di un oggetto Parameter
esistente. SourceColumn
è il nome dell'oggetto DataColumn derivato da DataRow in cui viene recuperato il valore di Parameter
. SourceVersion
specifica la versione di DataRow
usata da DataAdapter
per recuperare il valore.
Nella tabella seguente sono elencati i valori di enumerazione DataRowVersion disponibili per l'uso con SourceVersion
.
Enumerazione DataRowVersion | Descrizione |
---|---|
Current |
Il parametro usa il valore corrente della colonna. Si tratta dell'impostazione predefinita. |
Default |
Il parametro usa il valore DefaultValue della colonna. |
Original |
Il parametro usa il valore originale della colonna. |
Proposed |
Il parametro usa un valore proposto. |
Nell'esempio di codice SqlClient
della sezione successiva viene definito un parametro per un oggetto UpdateCommand in cui la colonna CustomerID
viene usata come SourceColumn
per due parametri: @CustomerID
(SET CustomerID = @CustomerID
) e @OldCustomerID
(WHERE CustomerID = @OldCustomerID
). Il parametro @CustomerID
viene usato per aggiornare la colonna CustomerID in base al valore corrente di DataRow
. Di conseguenza, viene usato CustomerID
SourceColumn
in cui il valore di SourceVersion
è uguale a Current
. Il parametro @OldCustomerID
viene usato per identificare la riga corrente nell'origine dati. Poiché il valore della colonna corrispondente viene individuato nella versione Original
della riga, verrà usato lo stesso oggetto SourceColumn
(CustomerID
) con SourceVersion
Original
.
Usare i parametri SqlClient
Nell'esempio seguente viene illustrato come creare un oggetto SqlDataAdapter e impostare MissingSchemaAction su AddWithKey per recuperare informazioni aggiuntive sullo schema dal database. Vengono impostate le proprietà SelectCommand, InsertCommand, UpdateCommand e DeleteCommand e i relativi oggetti SqlParameter corrispondenti vengono aggiunti alla raccolta Parameters. Il metodo restituisce un oggetto SqlDataAdapter
.
public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
// Assumes that connection is a valid SqlConnection object
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
// Create the commands.
adapter.SelectCommand = new SqlCommand(
"SELECT CustomerID, CompanyName FROM CUSTOMERS", connection);
adapter.InsertCommand = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", connection);
adapter.UpdateCommand = new SqlCommand(
"UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", connection);
adapter.DeleteCommand = new SqlCommand(
"DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);
// Create the parameters.
adapter.InsertCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.InsertCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName");
adapter.UpdateCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.UpdateCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName");
adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
SqlDbType.Char, 5, "CustomerID").SourceVersion =
DataRowVersion.Original;
adapter.DeleteCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID").SourceVersion =
DataRowVersion.Original;
return adapter;
}