Condividi tramite


Parametri DataAdapter

Si applica a: .NET Framework .NET .NET Standard

Scarica ADO.NET

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 SourceVersionOriginal.

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;
}

Vedi anche