Partager via


Activités d'accès à la base de données

Les activités d'accès aux bases de données vous permettent d'accéder à une base de données dans un workflow. Ces activités permettent d’utiliser ADO.NET pour accéder à des bases de données afin de récupérer ou de modifier des informations.

Activités de base de données

Les sections suivantes détaillent la liste des activités incluses dans l’exemple DbActivities.

DbUpdate

Exécute une requête SQL qui produit une modification dans la base de données (insertion, mise à jour, suppression et autres modifications).

Cette classe effectue son travail de façon asynchrone (elle dérive d'AsyncCodeActivity et utilise ses fonctionnalités asynchrones).

Les informations de connexion peuvent être configurées en définissant un nom invariant de fournisseur (ProviderName) et la chaîne de connexion (ConnectionString), ou simplement à l'aide d'un nom de configuration de chaîne de connexion (ConfigFileSectionName) provenant du fichier de configuration de l'application.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

La requête à exécuter est configurée dans sa propriété Sql et les paramètres sont passés via la collection Parameters.

Une fois DbUpdate exécuté, le nombre des enregistrements affectés est retourné dans la propriété AffectedRecords.

Public class DbUpdate: AsyncCodeActivity
{
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }

    [DependsOn("Parameters")]
    public OutArgument<int> AffectedRecords { get; set; }
}
Argument Description
ProviderName Nom invariant du fournisseur ADO.NET. Si cet argument est défini, ConnectionString doit également être défini.
ConnectionString Chaîne de connexion utilisée pour se connecter à la base de données. Si cet argument est défini, ProviderName doit également être défini.
ConfigName Nom de la section du fichier de configuration où les informations de connexion sont stockées. Lorsque cet argument est défini, ProviderName et ConnectionString ne sont pas requis.
CommandType Type du DbCommand à exécuter.
SQL Commande SQL à exécuter.
Paramètres Collection des paramètres de la requête SQL.
AffectedRecords Nombre d'enregistrements affectés par la dernière opération.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

DbQueryScalar

Exécute une requête qui récupère une valeur unique à partir de la base de données.

Cette classe effectue son travail de façon asynchrone (elle dérive d'AsyncCodeActivity<TResult> et utilise ses fonctionnalités asynchrones).

Les informations de connexion peuvent être configurées en définissant un nom invariant de fournisseur (ProviderName) et la chaîne de connexion (ConnectionString), ou simplement à l'aide d'un nom de configuration de chaîne de connexion (ConfigFileSectionName) provenant du fichier de configuration de l'application.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

La requête à exécuter est configurée dans sa propriété Sql et les paramètres sont passés via la collection Parameters.

Une fois DbQueryScalar exécuté, le scalaire est renvoyé dans l’argument Result out (de type TResult, défini dans la classe de base AsyncCodeActivity<TResult>).

public class DbQueryScalar<TResult> : AsyncCodeActivity<TResult>
{
    // public arguments
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }
}
Argument Description
ProviderName Nom invariant du fournisseur ADO.NET. Si cet argument est défini, ConnectionString doit également être défini.
ConnectionString Chaîne de connexion utilisée pour se connecter à la base de données. Si cet argument est défini, ProviderName doit également être défini.
CommandType Type du DbCommand à exécuter.
ConfigName Nom de la section du fichier de configuration où les informations de connexion sont stockées. Lorsque cet argument est défini, ProviderName et ConnectionString ne sont pas requis.
SQL Commande SQL à exécuter.
Paramètres Collection des paramètres de la requête SQL.
Résultats Scalaire obtenu une fois la requête exécutée. Cet argument est de type TResult.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

DbQuery

Exécute une requête qui récupère une liste d'objets. Une fois la requête exécutée, une fonction de mappage est exécutée (ce peut être Func<TResult><DbDataReader, TResult> ou un ActivityFunc<TResult><DbDataReader, TResult>). Cette fonction de mappage obtient un enregistrement dans un DbDataReader et le mappe à l'objet à retourner.

Les informations de connexion peuvent être configurées en définissant un nom invariant de fournisseur (ProviderName) et la chaîne de connexion (ConnectionString), ou simplement à l'aide d'un nom de configuration de chaîne de connexion (ConfigFileSectionName) provenant du fichier de configuration de l'application.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

La requête à exécuter est configurée dans sa propriété Sql et les paramètres sont passés via la collection Parameters.

Les résultats de la requête SQL sont récupérés à l'aide d'un DbDataReader. L'activité itère au sein de DbDataReader et mappe les lignes de DbDataReader à une instance de TResult. L’utilisateur de DbQuery doit fournir le code de mappage. Cette opération peut être effectuée de deux façons : à l’aide d’un Func<TResult><DbDataReader, TResult> ou d’un ActivityFunc<TResult><DbDataReader, TResult>. Dans le premier cas, le mappage est effectué en une seule impulsion d'exécution. Par conséquent, il est plus rapide, mais ne peut pas être sérialisé en XAML. Dans le dernier cas, le mappage est effectué en plusieurs impulsions. Par conséquent, il peut être plus lent mais peut être sérialisé en XAML et créé de façon déclarative (toute activité existante peut participer au mappage).

public class DbQuery<TResult> : AsyncCodeActivity<IList<TResult>> where TResult : class
{
    // public arguments
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }

    [OverloadGroup("DirectMapping")]
    [DefaultValue(null)]
    public Func<DbDataReader, TResult> Mapper { get; set; }

    [OverloadGroup("MultiplePulseMapping")]
    [DefaultValue(null)]
    public ActivityFunc<DbDataReader, TResult> MapperFunc { get; set; }
}
Argument Description
ProviderName Nom invariant du fournisseur ADO.NET. Si cet argument est défini, ConnectionString doit également être défini.
ConnectionString Chaîne de connexion utilisée pour se connecter à la base de données. Si cet argument est défini, ProviderName doit également être défini.
CommandType Type du DbCommand à exécuter.
ConfigName Nom de la section du fichier de configuration où les informations de connexion sont stockées. Lorsque cet argument est défini, ProviderName et ConnectionString ne sont pas requis.
SQL Commande SQL à exécuter.
Paramètres Collection des paramètres de la requête SQL.
Mapper Fonction de mappage (Func<TResult><DbDataReader, TResult>) qui prend un enregistrement dans le DataReader obtenu comme résultat de l’exécution de la requête et renvoie une instance d’un objet de type TResult à ajouter à la collection Result.

Dans ce cas, le mappage est effectué en seule impulsion d'exécution, mais il ne peut pas être créé de façon déclarative à l'aide du concepteur.
MapperFunc Fonction de mappage (ActivityFunc<TResult><DbDataReader, TResult>) qui prend un enregistrement dans le DataReader obtenu comme résultat de l’exécution de la requête et renvoie une instance d’un objet de type TResult à ajouter à la collection Result.

Dans ce cas, le mappage est effectué en plusieurs impulsions d'exécution. Cette fonction peut être sérialisée en XAML et créée de façon déclarative (toute activité existante peut participer au mappage).
Résultats Liste des objets obtenus en résultat de l'exécution de la requête et de l'exécution de la fonction de mappage pour chaque d'enregistrement de DataReader.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

DbQueryDataSet

Exécute une requête qui retourne un DataSet. Cette classe effectue son travail de façon asynchrone. Elle dérive d’AsyncCodeActivity<TResult> et utilise ses fonctionnalités asynchrones.

Les informations de connexion peuvent être configurées en définissant un nom invariant de fournisseur (ProviderName) et la chaîne de connexion (ConnectionString), ou simplement à l'aide d'un nom de configuration de chaîne de connexion (ConfigFileSectionName) provenant du fichier de configuration de l'application.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

La requête à exécuter est configurée dans sa propriété Sql et les paramètres sont passés via la collection Parameters.

Une fois DbQueryDataSet exécuté, DataSet est renvoyé dans l’argument Result out (de type TResult, défini dans la classe de base AsyncCodeActivity<TResult>).

public class DbQueryDataSet : AsyncCodeActivity<DataSet>
{
    // public arguments
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }
}
Argument Description
ProviderName Nom invariant du fournisseur ADO.NET. Si cet argument est défini, ConnectionString doit également être défini.
ConnectionString Chaîne de connexion utilisée pour se connecter à la base de données. Si cet argument est défini, ProviderName doit également être défini.
ConfigName Nom de la section du fichier de configuration où les informations de connexion sont stockées. Lorsque cet argument est défini, ProviderName et ConnectionString ne sont pas requis.
CommandType Type du DbCommand à exécuter.
SQL Commande SQL à exécuter.
Paramètres Collection des paramètres de la requête SQL.
Résultats DataSet obtenu une fois la requête exécutée.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

Configurer des informations de connexion

Tous les DbActivities partagent les mêmes paramètres de configuration. Ils peuvent être configurés de deux façons :

  • ConnectionString + InvariantName : définit le nom invariant du fournisseur ADO.NET et la chaîne de connexion.

    Activity dbSelectCount = new DbQueryScalar<DateTime>()
    {
        ProviderName = "System.Data.SqlClient",
        ConnectionString = @"Data Source=.\SQLExpress;
                              Initial Catalog=DbActivitiesSample;
                              Integrated Security=True",
        Sql = "SELECT GetDate()"
    };
    
  • ConfigName : définit le nom de la section de configuration qui contient les informations de connexion.

    <connectionStrings>
        <add name="DbActivitiesSample"
              providerName="System.Data.SqlClient"
              connectionString="Data Source=.\SQLExpress;Initial Catalog=DbActivitiesSample;Integrated Security=true"/>
      </connectionStrings>
    

    Dans l'activité :

    Activity dbSelectCount = new DbQueryScalar<int>()
    {
        ConfigName = "DbActivitiesSample",
        Sql = "SELECT COUNT(*) FROM Roles"
    };
    

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.

Exécuter cet exemple

Instructions de configuration

Cet exemple utilise une base de données. Un script d'installation et de chargement (Setup.cmd) est fourni avec l'exemple. Vous devez exécuter ce fichier à l'aide de l'invite de commandes.

Le script Setup.cmd appelle le fichier de script CreateDb.sql, lequel contient des commandes SQL qui effectuent les opérations suivantes :

  • Crée une base de données appelée DbActivitiesSample.
  • Crée la table Roles.
  • Crée la table Employees.
  • Insère trois enregistrements dans la table Roles.
  • Insère douze enregistrements dans la table Employees.

Pour exécuter Setup.cmd

  1. Ouvrez une invite de commandes.

  2. Accédez au dossier d'exemples DbActivities.

  3. Saisissez « setup.cmd » et appuyez sur Entrée.

    Notes

    Setup.cmd tente d'installer l'exemple dans l'instance SqlExpress de votre ordinateur local. Si vous voulez l'installer dans une autre instance SQL Server, modifiez Setup.cmd avec le nom de la nouvelle instance.

Exécution de l'exemple

  1. Ouvrez la solution dans Visual Studio.
  2. Appuyez sur Ctrl+Maj+B pour compiler la solution.
  3. Appuyez sur Ctrl+F5 pour exécuter l'exemple sans débogage.

Pour désinstaller l'exemple de base de données, exécutez Cleanup.cmd à partir du dossier d'exemple dans une invite de commandes.

Important

Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.

<InstallDrive>:\WF_WCF_Samples

Si ce répertoire n’existe pas, accédez à la page Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.

<InstallDrive>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\DbActivities