Partager via


Paramètres des DataAdapter

S'applique à : .NET Framework .NET .NET Standard

Télécharger ADO.NET

L'objet DbDataAdapter possède quatre propriétés qui sont utilisées pour récupérer des données dans la source de données et y mettre des données à jour : la propriété SelectCommand retourne des données de la source de données et les propriétés InsertCommand, UpdateCommand et DeleteCommand sont utilisées pour gérer les modifications au niveau de la source de données.

Notes

La propriété SelectCommand doit être définie avant d'appeler la méthode Fill du DataAdapter. Les propriétés InsertCommand, UpdateCommand ou DeleteCommand doivent être définies avant que la méthode Update du DataAdapter ne soit appelée, en fonction des modifications qui ont été apportées aux données dans le DataTable. Par exemple, si des lignes ont été ajoutées, InsertCommand doit être défini avant d'appeler Update. Lorsque Update traite une ligne insérée, mise à jour ou supprimée, le DataAdapter utilise la propriété Command respective pour traiter l'action. Les informations actuelles concernant la ligne modifiée sont passées à l’objet Command par le biais de la collection Parameters.

Quand vous mettez à jour une ligne au niveau de la source de données, vous appelez l’instruction UPDATE, qui utilise un identificateur unique pour identifier la ligne de la table à mettre à jour. Cet identificateur unique est généralement la valeur d'un champ de clé primaire. L'instruction UPDATE utilise les paramètres qui contiennent l'identificateur unique ainsi que les colonnes et les valeurs à mettre à jour, comme indiqué dans l'instruction Transact-SQL suivante.

UPDATE Customers SET CompanyName = @CompanyName
  WHERE CustomerID = @CustomerID  

Notes

La syntaxe des espaces réservés des paramètres dépend de la source de données. Cet exemple montre les espaces réservés pour une source de données SQL Server.

Dans cet exemple , le champ CompanyName est mis à jour avec la valeur du paramètre @CompanyName pour la ligne où CustomerID a la valeur du paramètre @CustomerID. Les paramètres extraient les informations de la ligne modifiée en utilisant la propriété SourceColumn de l’objet SqlParameter. Les paramètres suivants sont ceux de l'instruction UPDATE de l'exemple précédent. Le code est basé sur l'hypothèse que la variable adapter représente un objet SqlDataAdapter valide.

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

La méthode Add de la collection Parameters prend le nom du paramètre, le type de données, la taille (si elle est applicable au type) et le nom de la propriété SourceColumn du DataTable. Notez que la propriété SourceVersion du paramètre @CustomerID a la valeur Original. Cela garantit que la ligne existante dans la source de données est mise à jour si la valeur de la ou des colonnes d'identification a été modifiée dans l'objet DataRow. Dans ce cas, la valeur de ligne Original correspondrait à la valeur actuelle de la source de données et la valeur de ligne Current contiendrait la valeur mise à jour. Le SourceVersion du paramètre @CompanyName n'est pas défini et utilise la valeur de ligne Current par défaut.

Notes

Pour les opérations Fill de DataAdapter comme pour les méthodes Get de DataReader, le type .NET est inféré du type retourné du Fournisseur de données Microsoft SqlClient pour SQL Server. Les types inférés et méthodes d’accesseur pour les types de données Microsoft SQL Server sont décrits dans Mappages des types de données dans ADO.NET.

Parameter.SourceColumn, Parameter.SourceVersion

Le SourceColumn et SourceVersion peuvent être passés comme arguments au constructeur Parameterou définis comme propriétés d'un Parameter existant. SourceColumn est le nom de l'objet DataColumn provenant de l'objet DataRow dans lequel la valeur de Parameter sera récupérée. SourceVersion spécifie la version du DataRow que le DataAdapter utilise pour récupérer la valeur.

Le tableau suivant présente les valeurs d'énumération DataRowVersion disponibles pour être utilisées avec SourceVersion.

Énumération DataRowVersion Description
Current Le paramètre utilise la valeur actuelle de la colonne. Il s’agit de la valeur par défaut.
Default Ce paramètre utilise le DefaultValue de la colomne.
Original Le paramètre utilise la valeur d'origine de la colonne.
Proposed Le paramètre utilise une valeur proposée.

L'exemple de code SqlClient de la section suivante définit un paramètre d'une propriété UpdateCommand dans lequel la colonne CustomerID est utilisée comme SourceColumn pour deux paramètres : @CustomerID (SET CustomerID = @CustomerID) et @OldCustomerID (WHERE CustomerID = @OldCustomerID). Le paramètre @CustomerID est utilisé pour mettre à jour la colonne CustomerID avec la valeur actuelle dans la DataRow. Par conséquent, la SourceColumn de CustomerID avec une SourceVersion ayant la valeur Current est utilisé. Le paramètre @OldCustomerID est utilisé pour identifier la ligne actuelle dans la source de données. Puisque la valeur de colonne correspondante se trouve dans la version Original de la ligne, le même SourceColumn (CustomerID) avec un SourceVersion ayant la valeur Original est utilisé.

Utiliser des paramètres SqlClient

L'exemple suivant montre comment créer un objet SqlDataAdapter et affecter la valeur MissingSchemaAction à la propriété AddWithKey de manière à récupérer des informations de schéma supplémentaires de la base de données. Les propriétés SelectCommand, InsertCommand, UpdateCommand et DeleteCommand définies, ainsi que les objets SqlParameter correspondants ajoutés à la collection Parameters. La méthode retourne un objet 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;
}

Voir aussi