Actividades de acceso a bases de datos
Las actividades de acceso a bases de datos permiten tener acceso a una base de datos dentro de un flujo de trabajo. Estas actividades permiten tener acceso a las bases de datos para recuperar o modificar información y usar ADO.NET para acceder a la base de datos.
Actividades de base de datos
En las siguientes secciones se detalla la lista de actividades incluidas en el ejemplo DbActivities.
DbUpdate
Ejecuta una consulta SQL que genera una modificación en la base de datos (inserción, actualización, eliminación y otras modificaciones).
Esta clase realiza su trabajo de forma asincrónica (deriva de AsyncCodeActivity y usa sus capacidades asincrónicas).
La información de conexión se puede configurar estableciendo un nombre invariable de proveedor (ProviderName
) y la cadena de conexión (ConnectionString
) o simplemente utilizando un nombre de configuración de cadena de conexión (ConfigFileSectionName
) del archivo de configuración de la aplicación.
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
La consulta que se va a ejecutar se configura en su propiedad Sql
y los parámetros se pasan a través de la colección Parameters
.
Una vez ejecutado DbUpdate
, el número de registros afectado se devuelve en la propiedad 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; }
}
Argumento | Descripción |
---|---|
ProviderName | Nombre invariable de proveedor de ADO.NET. Si se establece este argumento, también se debe establecer ConnectionString . |
ConnectionString | Cadena de conexión para conectar a la base de datos. Si se establece este argumento, también se debe establecer ProviderName . |
ConfigName | Nombre de la sección de archivo de configuración donde se almacena la información de conexión. Cuando se establece este argumento no se requieren ProviderName ni ConnectionString . |
CommandType | Tipo de DbCommand que se va a ejecutar. |
Sql | Comando SQL que se va a ejecutar. |
Parámetros | Colección de los parámetros de la consulta SQL. |
AffectedRecords | Número de registros afectado por la última operación. |
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
DbQueryScalar
Ejecuta una consulta que recupera un único valor de la base de datos.
Esta clase realiza su trabajo de forma asincrónica (deriva de AsyncCodeActivity<TResult> y usa sus capacidades asincrónicas).
La información de conexión se puede configurar estableciendo un nombre invariable de proveedor (ProviderName
) y la cadena de conexión (ConnectionString
) o simplemente utilizando un nombre de configuración de cadena de conexión (ConfigFileSectionName
) del archivo de configuración de la aplicación.
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
La consulta que se va a ejecutar se configura en su propiedad Sql
y los parámetros se pasan a través de la colección Parameters
.
Una vez ejecutado DbQueryScalar
, el valor escalar se devuelve en el argumento Result out
(de tipo TResult
que se define en la clase 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; }
}
Argumento | Descripción |
---|---|
ProviderName | Nombre invariable de proveedor de ADO.NET. Si se establece este argumento, también se debe establecer ConnectionString . |
ConnectionString | Cadena de conexión para conectar a la base de datos. Si se establece este argumento, también se debe establecer ProviderName . |
CommandType | Tipo de DbCommand que se va a ejecutar. |
ConfigName | Nombre de la sección de archivo de configuración donde se almacena la información de conexión. Cuando se establece este argumento no se requieren ProviderName ni ConnectionString . |
Sql | Comando SQL que se va a ejecutar. |
Parámetros | Colección de los parámetros de la consulta SQL. |
Resultado | Valor escalar que se obtiene una vez ejecutada la consulta. Este argumento es de tipo TResult . |
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
DbQuery
Ejecuta una consulta que recupera una lista de objetos. Una vez ejecutada la consulta, se ejecuta una función de asignación (puede ser Func<TResult><DbDataReader
, TResult
> o ActivityFunc<TResult><DbDataReader
, TResult
>). Esta función de asignación obtiene un registro de DbDataReader
y lo asigna al objeto que se va a devolver.
La información de conexión se puede configurar estableciendo un nombre invariable de proveedor (ProviderName
) y la cadena de conexión (ConnectionString
) o simplemente utilizando un nombre de configuración de cadena de conexión (ConfigFileSectionName
) del archivo de configuración de la aplicación.
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
La consulta que se va a ejecutar se configura en su propiedad Sql
y los parámetros se pasan a través de la colección Parameters
.
Los resultados de la consulta SQL se recuperan utilizando DbDataReader
. La actividad recorre en iteración DbDataReader
y asigna las filas de DbDataReader
a una instancia de TResult
. El usuario de DbQuery
tiene que proporcionar el código de asignación, lo que se puede llevar a cabo de dos maneras, mediante Func<TResult><DbDataReader
, TResult
> o ActivityFunc<TResult><DbDataReader
, TResult
>. En el primer caso, la asignación se realiza en un pulso único de ejecución. Por tanto, es más rápida, pero esto no se puede serializar en XAML. En el último caso, la asignación se realiza en varios pulsos. Por tanto, puede ser más lenta pero se serializar en XAML y crear mediante declaración (cualquier actividad existente puede participar en la asignación).
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; }
}
Argumento | Descripción |
---|---|
ProviderName | Nombre invariable de proveedor de ADO.NET. Si se establece este argumento, también se debe establecer ConnectionString . |
ConnectionString | Cadena de conexión para conectar a la base de datos. Si se establece este argumento, también se debe establecer ProviderName . |
CommandType | Tipo de DbCommand que se va a ejecutar. |
ConfigName | Nombre de la sección de archivo de configuración donde se almacena la información de conexión. Cuando se establece este argumento no se requieren ProviderName ni ConnectionString . |
Sql | Comando SQL que se va a ejecutar. |
Parámetros | Colección de los parámetros de la consulta SQL. |
Mapper | Función de asignación (Func<TResult><DbDataReader , TResult >) que toma un registro de DataReader obtenido como resultado de la ejecución de la consulta y devuelve una instancia de un objeto de tipo TResult que se debe agregar a la colección Result .En este caso, la asignación se realiza mediante un único pulso de ejecución, pero no se puede crear mediante declaración utilizando el diseñador. |
MapperFunc | Función de asignación (ActivityFunc<TResult><DbDataReader , TResult >) que toma un registro de DataReader obtenido como resultado de la ejecución de la consulta y devuelve una instancia de un objeto de tipo TResult que se debe agregar a la colección Result .En este caso, la asignación se realiza en varios pulsos de ejecución. Esta función se puede serializar en XAML y crear mediante declaración (cualquier actividad existente puede participar en la asignación). |
Resultado | Lista de objetos obtenidos como resultado de ejecutar la consulta y ejecutar la función de asignación para cada registro de DataReader . |
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
DbQueryDataSet
Ejecuta una consulta que devuelve una clase DataSet. Esta clase realiza su trabajo de forma asincrónica. Deriva de AsyncCodeActivity<TResult
> y utiliza sus funcionalidades asincrónicas.
La información de conexión se puede configurar estableciendo un nombre invariable de proveedor (ProviderName
) y la cadena de conexión (ConnectionString
) o simplemente utilizando un nombre de configuración de cadena de conexión (ConfigFileSectionName
) del archivo de configuración de la aplicación.
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
La consulta que se va a ejecutar se configura en su propiedad Sql
y los parámetros se pasan a través de la colección Parameters
.
Una vez ejecutado DbQueryDataSet
, la clase DataSet
se devuelve en el argumento Result out
(de tipo TResult
que se define en la clase 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; }
}
Argumento | Descripción |
---|---|
ProviderName | Nombre invariable de proveedor de ADO.NET. Si se establece este argumento, también se debe establecer ConnectionString . |
ConnectionString | Cadena de conexión para conectar a la base de datos. Si se establece este argumento, también se debe establecer ProviderName . |
ConfigName | Nombre de la sección de archivo de configuración donde se almacena la información de conexión. Cuando se establece este argumento no se requieren ProviderName ni ConnectionString . |
CommandType | Tipo de DbCommand que se va a ejecutar. |
Sql | Comando SQL que se va a ejecutar. |
Parámetros | Colección de los parámetros de la consulta SQL. |
Resultado | DataSet que se obtiene una vez ejecutada la consulta. |
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
Configurar información de conexión
Todas las actividades de base de datos comparten los mismos parámetros de configuración. Se pueden configurar de dos maneras:
ConnectionString + InvariantName
: establezca el nombre invariable de proveedor de ADO.NET y la cadena de conexión.Activity dbSelectCount = new DbQueryScalar<DateTime>() { ProviderName = "System.Data.SqlClient", ConnectionString = @"Data Source=.\SQLExpress; Initial Catalog=DbActivitiesSample; Integrated Security=True", Sql = "SELECT GetDate()" };
ConfigName
: establezca el nombre de la sección de configuración que contiene la información de conexión.<connectionStrings> <add name="DbActivitiesSample" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLExpress;Initial Catalog=DbActivitiesSample;Integrated Security=true"/> </connectionStrings>
En la actividad:
Activity dbSelectCount = new DbQueryScalar<int>() { ConfigName = "DbActivitiesSample", Sql = "SELECT COUNT(*) FROM Roles" };
Importante
Microsoft recomienda usar el flujo de autenticación más seguro disponible. Si se conecta a Azure SQL, el método de autenticación recomendado es Identidades administradas para recursos de Azure.
Ejecute este ejemplo
Instrucciones de instalación
En este ejemplo se utiliza una base de datos. Con el ejemplo se proporciona un script de instalación y carga (Setup.cmd). Debe ejecutar ese archivo mediante el símbolo del sistema.
El script Setup.cmd invoca el archivo de script CreateDb.sql, que contiene comandos SQL con los que realiza lo siguiente:
- Crea una base de datos llamada DbActivitiesSample.
- Crea la tabla Roles.
- Crea la tabla Employees.
- Inserta tres registros en la tabla Roles.
- Inserta doce registros en la tabla Employees.
Para ejecutar Setup.cmd
Abra un símbolo del sistema.
Vaya a la carpeta de ejemplo DbActivities.
Escriba "setup.cmd" y presione Entrar.
Nota
Setup.cmd intenta instalar el ejemplo en la instancia de SqlExpress del equipo local. Si desea instalarlo en otra instancia de SQL Server, modifique Setup.cmd con el nombre de la nueva instancia.
Para ejecutar el ejemplo
- Abra la solución en Visual Studio.
- Para compilar la solución, presione Ctrl+Mayús+B.
- Para ejecutar el ejemplo sin depurar, presione Ctrl+F5.
Para desinstalar la base de datos de ejemplo, ejecute Cleanup.cmd desde la carpeta de ejemplo en un símbolo del sistema.
Importante
Podría ser que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (predeterminado) antes de continuar.
<InstallDrive>:\WF_WCF_Samples
Si no existe este directorio, vaya a la página Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 [Ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) para .NET Framework 4] para descargar todos los ejemplos de Windows Communication Foundation (WCF) y WF . Este ejemplo se encuentra en el siguiente directorio.
<InstallDrive>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\DbActivities