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
Ouvrez une invite de commandes.
Accédez au dossier d'exemples DbActivities.
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
- Ouvrez la solution dans Visual Studio.
- Appuyez sur Ctrl+Maj+B pour compiler la solution.
- 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