Attività di accesso al databaseDatabase Access Activities

Le attività di accesso al database consentono di accedere a un database all'interno di un flusso di lavoro.Database access activities allow you to access a database within a workflow. Queste attività consentono l'accesso a database per recuperare o modificare le informazioni e usare ADO.NET per accedere al database.These activities allow accessing databases to retrieve or modify information and use ADO.NET to access the database.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al (pagina di download) per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to (download page) to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

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

Attività di databaseDatabase Activities

Nelle sezioni seguenti viene descritto in dettaglio l'elenco delle attività incluse in questo esempio.The following sections detail the list of activities included in this sample.

DbUpdateDbUpdate

Esegue una query SQL che produce una modifica nel database (inserimento, aggiornamento, eliminazione e altre modifiche).Executes a SQL query that produces a modification in the database (insert, update, delete, and other modifications).

Questa classe esegue le relative operazioni in modo asincrono (deriva da AsyncCodeActivity e usa le relative funzionalità asincrone).This class performs its work asynchronously (it derives from AsyncCodeActivity and uses its asynchronous capabilities).

È possibile configurare le informazioni di connessione impostando un nome invariante del provider (ProviderName) e la stringa di connessione (ConnectionString) o solo usando un nome di configurazione della stringa di connessione (ConfigFileSectionName) dal file di configurazione dell'applicazione.The connection information can be configured by setting a provider invariant name (ProviderName) and the connection string (ConnectionString) or just using a connection string configuration name (ConfigFileSectionName) from the application configuration file.

La query da eseguire viene configurata nella relativa proprietà Sql e i parametri vengono passati tramite la raccolta Parameters.The query to be executed is configured in its Sql property and the parameters are passed through the Parameters collection.

Dopo l'esecuzione di DbUpdate, il numero di record interessati viene restituito nella proprietà AffectedRecords.After DbUpdate is executed, the number of affected records is returned in the AffectedRecords property.

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; }       
}  
ArgomentoArgument DescrizioneDescription
ProviderNameProviderName Nome invariante del provider ADO.NET.ADO.NET provider invariant name. Se viene impostato questo argomento, è necessario impostare anche ConnectionString.If this argument is set, then the ConnectionString must also be set.
ConnectionStringConnectionString Stringa di connessione per connettersi al database.Connection string to connect to the database. Se viene impostato questo argomento, è necessario impostare anche ProviderName.If this argument is set, then ProviderName must also be set.
ConfigNameConfigName Nome della sezione del file di configurazione in cui sono archiviate le informazioni di connessione.Name of the configuration file section where the connection information is stored. Quando viene impostato questo argomento, ProviderName e ConnectionString non sono richiesti.When this argument is set ProviderName and ConnectionString are not required.
CommandTypeCommandType Tipo di DbCommand da eseguire.Type of the DbCommand to be executed.
SqlSql Comando SQL da eseguire.The SQL command to be executed.
ParametriParameters Raccolta di parametri della query SQL.Collection of the parameters of the SQL query.
AffectedRecordsAffectedRecords Numero di record interessato dall'ultima operazione.Number of records affected by the last operation.

DbQueryScalarDbQueryScalar

Esegue una query che recupera un singolo valore dal database.Executes a query that retrieves a single value from the database.

Questa classe esegue le relative operazioni in modo asincrono (deriva da AsyncCodeActivity<TResult> e usa le relative funzionalità asincrone).This class performs its work asynchronously (it derives from AsyncCodeActivity<TResult> and uses its asynchronous capabilities).

È possibile configurare le informazioni di connessione impostando un nome invariante del provider (ProviderName) e la stringa di connessione (ConnectionString) o solo usando un nome di configurazione della stringa di connessione (ConfigFileSectionName) dal file di configurazione dell'applicazione.The connection information can be configured by setting a provider invariant name (ProviderName) and the connection string (ConnectionString) or just using a connection string configuration name (ConfigFileSectionName) from the application configuration file.

La query da eseguire viene configurata nella relativa proprietà Sql e i parametri vengono passati tramite la raccolta Parameters.The query to be executed is configured in its Sql property and the parameters are passed through the Parameters collection.

Dopo DbQueryScalar viene eseguita, viene restituito il valore scalare nel Result``out argomento (di tipo TResult, che è definito nella classe base AsyncCodeActivity<TResult>).After DbQueryScalar is executed, the scalar is returned in the Result``out argument (of type TResult, that is defined in the base class 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; }  
}  
ArgomentoArgument DescrizioneDescription
ProviderNameProviderName Nome invariante del provider ADO.NET.ADO.NET provider invariant name. Se viene impostato questo argomento, è necessario impostare anche ConnectionString.If this argument is set, then the ConnectionString must also be set.
ConnectionStringConnectionString Stringa di connessione per connettersi al database.Connection string to connect to the database. Se viene impostato questo argomento, è necessario impostare anche ProviderName.If this argument is set, then ProviderName must also be set.
ConfigNameConfigName Nome della sezione del file di configurazione in cui sono archiviate le informazioni di connessione.Name of the configuration file section where the connection information is stored. Quando viene impostato questo argomento, ProviderName e ConnectionString non sono richiesti.When this argument is set ProviderName and ConnectionString are not required.
CommandTypeCommandType Tipo di DbCommand da eseguire.Type of the DbCommand to be executed.
SqlSql Comando SQL da eseguire.The SQL command to be executed.
ParametriParameters Raccolta di parametri della query SQL.Collection of the parameters of the SQL query.
RisultatoResult Valore scalare ottenuto dopo l'esecuzione della query.Scalar that is obtained after the query is executed. Questo argomento è di tipo TResult.This argument is of type TResult.

DbQueryDbQuery

Esegue una query che recupera un elenco di oggetti.Executes a query that retrieves a list of objects. Dopo l'esecuzione della query, viene eseguita una funzione di mapping (può essere Func<TResult> < DbDataReader, TResult> o un ActivityFunc<TResult> < DbDataReader, TResult>).After the query is executed, a mapping function is executed (it can be Func<TResult><DbDataReader, TResult> or an ActivityFunc<TResult><DbDataReader, TResult>). Questa funzione di mapping ottiene un record in un oggetto DbDataReader e ne esegue il mapping all'oggetto da restituire.This mapping function gets a record in a DbDataReader and maps it to the object to be returned.

È possibile configurare le informazioni di connessione impostando un nome invariante del provider (ProviderName) e la stringa di connessione (ConnectionString) o solo usando un nome di configurazione della stringa di connessione (ConfigFileSectionName) dal file di configurazione dell'applicazione.The connection information can be configured by setting a provider invariant name (ProviderName) and the connection string (ConnectionString) or just using a connection string configuration name (ConfigFileSectionName) from the application configuration file.

La query da eseguire viene configurata nella relativa proprietà Sql e i parametri vengono passati tramite la raccolta Parameters.The query to be executed is configured in its Sql property and the parameters are passed through the Parameters collection.

I risultati della query SQL vengono recuperati usando un oggetto DbDataReader.The results of the SQL query are retrieved using a DbDataReader. L'attività scorre DbDataReader ed esegue il mapping delle righe in DbDataReader a un'istanza di TResult.The activity iterates through the DbDataReader and maps the rows in the DbDataReader to an instance of TResult. L'utente di DbQuery deve fornire il codice di mapping e ciò può essere eseguite in due modi: utilizzando un Func<TResult> < DbDataReader, TResult> o un ActivityFunc<TResult> < DbDataReader, TResult>.The user of DbQuery has to provide the mapping code and this can be done in two ways: using a Func<TResult><DbDataReader, TResult> or an ActivityFunc<TResult><DbDataReader, TResult>. Nel primo caso, il mapping viene eseguito in un singolo impulso.In the first case, the map is done in a single pulse of execution. È pertanto più veloce, ma non può essere serializzato in XAML.Therefore, it is faster, but this cannot be serialized to XAML. Nel secondo caso, il mapping viene eseguito in più impulsi.In the last case, the map is performed in multiple pulses. Può quindi risultare più lento, ma può essere serializzato in XAML e modificato in modo dichiarativo (qualsiasi attività esistente può partecipare al mapping).Therefore, it might be slower but can be serialized to XAML and authored declaratively (any existing activity can participate in the mapping).

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; }  
}  
ArgomentoArgument DescrizioneDescription
ProviderNameProviderName Nome invariante del provider ADO.NET.ADO.NET provider invariant name. Se viene impostato questo argomento, è necessario impostare anche ConnectionString.If this argument is set, then the ConnectionString must also be set.
ConnectionStringConnectionString Stringa di connessione per connettersi al database.Connection string to connect to the database. Se viene impostato questo argomento, è necessario impostare anche ProviderName.If this argument is set, then ProviderName must also be set.
ConfigNameConfigName Nome della sezione del file di configurazione in cui sono archiviate le informazioni di connessione.Name of the configuration file section where the connection information is stored. Quando viene impostato questo argomento, ProviderName e ConnectionString non sono richiesti.When this argument is set ProviderName and ConnectionString are not required.
CommandTypeCommandType Tipo di DbCommand da eseguire.Type of the DbCommand to be executed.
SqlSql Comando SQL da eseguire.The SQL command to be executed.
ParametriParameters Raccolta di parametri della query SQL.Collection of the parameters of the SQL query.
MapperMapper Funzione di mapping (Func<TResult><DbDataReader, TResult>) che accetta un record di DataReader ottenuto come risultato dell'esecuzione della query e restituisce un'istanza di un oggetto di tipo TResult da aggiungere al Result insieme.Mapping function (Func<TResult><DbDataReader, TResult>) that takes a record in the DataReader obtained as result of executing the query and returns an instance of an object of type TResult to be added to the Result collection.

In questo caso, il mapping viene eseguito in un singolo impulso, ma non può essere modificato in modo dichiarativo tramite la finestra di progettazione.In this case, mapping is done in a single pulse of execution, but it cannot be authored declaratively using the designer.
MapperFuncMapperFunc Funzione di mapping (ActivityFunc<TResult><DbDataReader, TResult>) che accetta un record di DataReader ottenuto come risultato dell'esecuzione della query e restituisce un'istanza di un oggetto di tipo TResult da aggiungere al Result insieme.Mapping function (ActivityFunc<TResult><DbDataReader, TResult>) that takes a record in the DataReader obtained as result of executing the query and returns an instance of an object of type TResult to be added to the Result collection.

In questo caso, il mapping viene eseguito in più impulsi.In this case, the mapping is done in multiple pulses of execution. Questa funzione può essere serializzata in XAML e modificata in modo dichiarativo (qualsiasi attività esistente può partecipare al mapping).This function can be serialized to XAML and authored declaratively (any existing activity can participate in the mapping).
RisultatoResult Elenco di oggetti ottenuto come risultato dell'esecuzione della query e dell'esecuzione della funzione di mapping per ogni record in DataReader.List of objects obtained as result of executing the query and executing the mapping function for each record in the DataReader.

DbQueryDataSetDbQueryDataSet

Esegue una query che restituisce un oggetto DataSet.Executes a query that returns a DataSet. Questa classe esegue le relative operazioni in modo asincrono.This class performs its work asynchronously. Deriva da AsyncCodeActivity < TResult> e Usa le relative funzionalità asincrone.It derives from AsyncCodeActivity<TResult> and uses its asynchronous capabilities.

È possibile configurare le informazioni di connessione impostando un nome invariante del provider (ProviderName) e la stringa di connessione (ConnectionString) o solo usando un nome di configurazione della stringa di connessione (ConfigFileSectionName) dal file di configurazione dell'applicazione.The connection information can be configured by setting a provider invariant name (ProviderName) and the connection string (ConnectionString) or just using a connection string configuration name (ConfigFileSectionName) from the application configuration file.

La query da eseguire viene configurata nella relativa proprietà Sql e i parametri vengono passati tramite la raccolta Parameters.The query to be executed is configured in its Sql property and the parameters are passed through the Parameters collection.

Dopo il DbQueryDataSet viene eseguito il DataSet viene restituito nel Result``out argomento (di tipo TResult, che viene definito nella classe base AsyncCodeActivity<TResult>).After the DbQueryDataSet is executed the DataSet is returned in the Result``out argument (of type TResult, that is defined in the base class 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; }  
}  
ArgomentoArgument DescrizioneDescription
ProviderNameProviderName Nome invariante del provider ADO.NET.ADO.NET provider invariant name. Se viene impostato questo argomento, è necessario impostare anche ConnectionString.If this argument is set, then the ConnectionString must also be set.
ConnectionStringConnectionString Stringa di connessione per connettersi al database.Connection string to connect to the database. Se viene impostato questo argomento, è necessario impostare anche ProviderName.If this argument is set, then ProviderName must also be set.
ConfigNameConfigName Nome della sezione del file di configurazione in cui sono archiviate le informazioni di connessione.Name of the configuration file section where the connection information is stored. Quando viene impostato questo argomento, ProviderName e ConnectionString non sono richiesti.When this argument is set ProviderName and ConnectionString are not required.
CommandTypeCommandType Tipo di DbCommand da eseguire.Type of the DbCommand to be executed.
SqlSql Comando SQL da eseguire.The SQL command to be executed.
ParametriParameters Raccolta di parametri della query SQL.Collection of the parameters of the SQL query.
RisultatoResult DataSet ottenuto dopo l'esecuzione della query.DataSet that is obtained after the query is executed.

Configurazione delle informazioni di connessioneConfiguring Connection Information

Tutte le attività DbActivities condividono gli stessi parametri di configurazione.All DbActivities share the same configuration parameters. Possono essere configurate in due modi:They can be configured in two ways:

  • ConnectionString + InvariantName: impostare il nome invariante del provider ADO.NET e la stringa di connessione.ConnectionString + InvariantName: Set the ADO.NET provider invariant name and connection string.

    Activity dbSelectCount = new DbQueryScalar<DateTime>()  
    {  
        ProviderName = "System.Data.SqlClient",  
        ConnectionString = @"Data Source=.\SQLExpress;  
                             Initial Catalog=DbActivitiesSample;  
                             Integrated Security=True",  
        Sql = "SELECT GetDate()"  
    };  
    
  • ConfigName: impostare il nome della sezione di configurazione che contiene le informazioni di connessione.ConfigName: Set the name of the configuration section that contains the connection information.

    <connectionStrings>      
        <add name="DbActivitiesSample"  
             providerName="System.Data.SqlClient"  
             connectionString="Data Source=.\SQLExpress;Initial Catalog=DbActivitiesSample;Integrated Security=true"/>  
      </connectionStrings>  
    
  • Nell'attività:In the activity:

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

Esecuzione dell'esempioRunning this sample

Istruzioni per l'impostazioneSetup instructions

In questo esempio viene usato un database.This sample uses a database. Con l'esempio viene fornito uno script di impostazione e caricamento (Setup.cmd) .A set-up and load script (Setup.cmd) is provided with the sample. È necessario eseguire il file dal prompt dei comandi.You must execute that file using the command prompt.

Lo script Setup.cmd richiama il file di script CreateDb.sql che contiene i comandi SQL per l'esecuzione delle operazioni seguenti:The Setup.cmd script invokes the CreateDb.sql script file, which contains SQL commands that do the following:

  • Crea un database denominato DbActivitiesSample.Creates a database called DbActivitiesSample.

  • Crea la tabella Ruoli.Creates the Roles table.

  • Crea la tabella Employees.Creates Employees table.

  • Inserisce tre record nella tabella Ruoli.Inserts three records into the Roles table.

  • Inserisce dodici record nella tabella Employees.Inserts twelve records into the Employees table.

Per eseguire Setup.cmdTo run Setup.cmd
  1. Aprire un prompt dei comandi.Open a command prompt.

  2. Passare alla cartella di esempio DbActivities.Go to the DbActivities sample folder.

  3. Digitare "setup.cmd" e premere INVIO.Type "setup.cmd" and press ENTER.

    Nota

    Setup.cmd tenta di installare l'esempio nell'istanza di SqlExpress del computer locale.Setup.cmd attempts to install the sample in your local machine SqlExpress instance. Se si desidera installarlo in un'altra istanza del server SQL, modificare Setup.cmd specificando il nome della nuova istanza.If you want to install it in other SQL server instance, edit Setup.cmd with the new instance name.

Per disinstallare il database di esempioTo uninstall the sample database
  1. Eseguire Cleanup.cmd dalla cartella di esempio in un prompt dei comandi.Run Cleanup.cmd from the sample folder in a command prompt.
Per eseguire l'esempioTo run the sample
  1. Aprire la soluzione in Visual Studio 2010Visual Studio 2010.Open the solution in Visual Studio 2010Visual Studio 2010

  2. Per compilare la soluzione, premere CTRL+MAIUSC+B.To compile the solution, press CTRL+SHIFT+B.

  3. Per eseguire l'esempio senza debug, premere CTRL+F5.To run the sample without debugging, press CTRL+F5.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

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