Freigeben über


Datenbankzugriffsaktivitäten

Mit Datenbankzugriffsaktivitäten können Sie auf eine Datenbank innerhalb eines Workflows zugreifen. Mit diesen Aktivitäten können Sie Informationen in Datenbanken abrufen und ändern sowie über ADO.NET auf Datenbanken zugreifen.

Datenbankaktivitäten

Die im DbActivities-Beispiel enthaltenen Aktivitäten sind in den folgenden Abschnitten aufgeführt.

DbUpdate

Führt eine SQL-Abfrage aus, die eine Änderung in der Datenbank (Einfügung, Aktualisierung, Löschung und andere Änderungen) vornimmt.

Die Ausführung dieser Klasse ist asynchron (sie leitet sich von AsyncCodeActivity ab und verwendet die asynchronen Funktionen dieser Aktivität).

Sie können die Verbindungsinformationen konfigurieren, indem Sie einen invarianten Anbieternamen (ProviderName) und die Verbindungszeichenfolge (ConnectionString) festlegen oder indem Sie einen Namen zur Konfiguration der Verbindungszeichenfolge (ConfigFileSectionName) aus der Anwendungskonfigurationsdatei verwenden.

Die auszuführende Abfrage wird in der Sql-Eigenschaft konfiguriert, und die Parameter werden über die Parameters-Auflistung übergeben.

Nach der Ausführung von DbUpdate wird die Anzahl der betroffenen Datensätze in der AffectedRecords-Eigenschaft zurückgegeben.

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 BESCHREIBUNG
ProviderName Invarianter Name des ADO.NET-Anbieters. Wenn dieses Argument festgelegt wird, muss ConnectionString ebenfalls festgelegt werden.
ConnectionString Die Verbindungszeichenfolge zum Herstellen einer Datenbankverbindung. Wenn dieses Argument festgelegt wird, muss ProviderName ebenfalls festgelegt werden.
ConfigName Name des Abschnitts in der Konfigurationsdatei, in dem die Verbindungsinformationen gespeichert sind. Wenn dieses Argument festgelegt wird, sind ProviderName und ConnectionString nicht erforderlich.
CommandType Der auszuführende DbCommand-Typ.
Sql Der auszuführende SQL-Befehl.
Parameter Auflistung der Parameter der SQL-Abfrage.
AffectedRecords Anzahl der vom letzten Vorgang betroffenen Datensätze.

DbQueryScalar

Führt eine Abfrage aus, die einen einzelnen Wert aus der Datenbank abruft.

Die Ausführung dieser Klasse ist asynchron (sie leitet sich von AsyncCodeActivity<TResult> ab und verwendet die asynchronen Funktionen dieser Aktivität).

Sie können die Verbindungsinformationen konfigurieren, indem Sie einen invarianten Anbieternamen (ProviderName) und die Verbindungszeichenfolge (ConnectionString) festlegen oder indem Sie einen Namen zur Konfiguration der Verbindungszeichenfolge (ConfigFileSectionName) aus der Anwendungskonfigurationsdatei verwenden.

Die auszuführende Abfrage wird in der Sql-Eigenschaft konfiguriert, und die Parameter werden über die Parameters-Auflistung übergeben.

Nach dem Ausführen von DbQueryScalar wird der Skalarwert im Result out-Argument vom Typ TResult zurückgegeben, der in der Basisklasse AsyncCodeActivity<TResult> definiert wird.

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 BESCHREIBUNG
ProviderName Invarianter Name des ADO.NET-Anbieters. Wenn dieses Argument festgelegt wird, muss ConnectionString ebenfalls festgelegt werden.
ConnectionString Die Verbindungszeichenfolge zum Herstellen einer Datenbankverbindung. Wenn dieses Argument festgelegt wird, muss ProviderName ebenfalls festgelegt werden.
ConfigName Name des Abschnitts in der Konfigurationsdatei, in dem die Verbindungsinformationen gespeichert sind. Wenn dieses Argument festgelegt wird, sind ProviderName und ConnectionString nicht erforderlich.
CommandType Der auszuführende DbCommand-Typ.
Sql Der auszuführende SQL-Befehl.
Parameter Auflistung der Parameter der SQL-Abfrage.
Ergebnis Skalarwert, der nach Ausführung der Abfrage zurückgegeben wird. Dieses Argument ist vom Typ TResult.

DbQuery

Führt eine Abfrage aus, die eine Liste von Objekten abruft. Nach dem Ausführen der Abfrage wird eine Zuordnungsfunktion ausgeführt (Func<TResult><DbDataReader, TResult> oder ActivityFunc<TResult><DbDataReader, TResult>). Diese Zuordnungsfunktion ruft einen Datensatz in einem DbDataReader ab und ordnet diesen dem zurückzugebenden Objekt zu.

Sie können die Verbindungsinformationen konfigurieren, indem Sie einen invarianten Anbieternamen (ProviderName) und die Verbindungszeichenfolge (ConnectionString) festlegen oder indem Sie einen Namen zur Konfiguration der Verbindungszeichenfolge (ConfigFileSectionName) aus der Anwendungskonfigurationsdatei verwenden.

Die auszuführende Abfrage wird in der Sql-Eigenschaft konfiguriert, und die Parameter werden über die Parameters-Auflistung übergeben.

Die Ergebnisse der SQL-Abfrage werden mit einem DbDataReader abgerufen. Die Aktivität durchläuft den DbDataReader und ordnet die Zeilen im DbDataReader einer Instanz von TResult zu. Der Benutzer von DbQuery muss den Zuordnungscode bereitstellen. Hierzu gibt es zwei Möglichkeiten: Func<TResult><DbDataReader, TResult> oder ActivityFunc<TResult><DbDataReader, TResult>. Im ersten Fall erfolgt die Zuordnung in einem Ausführungsschritt. Diese Variante ist schneller, kann aber nicht in XAML serialisiert werden. Im zweiten Fall erfolgt die Zuordnung in mehreren Schritten. Diese Variante ist möglicherweise langsamer, kann aber in XAML serialisiert und deklarativ erstellt werden (d. h. jede vorhandene Aktivität kann Teil der Zuordnung sein).

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 BESCHREIBUNG
ProviderName Invarianter Name des ADO.NET-Anbieters. Wenn dieses Argument festgelegt wird, muss ConnectionString ebenfalls festgelegt werden.
ConnectionString Die Verbindungszeichenfolge zum Herstellen einer Datenbankverbindung. Wenn dieses Argument festgelegt wird, muss ProviderName ebenfalls festgelegt werden.
ConfigName Name des Abschnitts in der Konfigurationsdatei, in dem die Verbindungsinformationen gespeichert sind. Wenn dieses Argument festgelegt wird, sind ProviderName und ConnectionString nicht erforderlich.
CommandType Der auszuführende DbCommand-Typ.
Sql Der auszuführende SQL-Befehl.
Parameter Auflistung der Parameter der SQL-Abfrage.
Mapper Zuordnungsfunktion (Func<TResult><DbDataReader, TResult>), die einen Datensatz im DataReader (Ergebnis der Ausführung der Abfrage) auswählt und eine Instanz eines Objekts vom Typ TResult zurückgibt, die der Result-Auflistung hinzugefügt wird.

In diesem Fall erfolgt die Zuordnung in einem Schritt, kann aber nicht im Designer deklarativ erstellt werden.
MapperFunc Zuordnungsfunktion (ActivityFunc<TResult><DbDataReader, TResult>), die einen Datensatz im DataReader (Ergebnis der Ausführung der Abfrage) auswählt und eine Instanz eines Objekts vom Typ TResult zurückgibt, die der Result-Auflistung hinzugefügt wird.

In diesem Fall erfolgt die Zuordnung in mehreren Schritten. Diese Funktion kann in XAML serialisiert und deklarativ erstellt werden (d. h. jede vorhandene Aktivität kann Teil der Zuordnung sein).
Ergebnis Eine Liste mit Objekten, die als Ergebnis der Ausführung der Abfrage und der Zuordnungsfunktion für jeden Datensatz im DataReader zurückgegeben wird.

DbQueryDataSet

Führt eine Abfrage aus, die ein DataSet zurückgibt. Die Ausführung dieser Klasse erfolgt asynchron. Sie leitet sich von AsyncCodeActivity<TResult> ab und verwendet die asynchronen Funktionen dieser Aktivität.

Sie können die Verbindungsinformationen konfigurieren, indem Sie einen invarianten Anbieternamen (ProviderName) und die Verbindungszeichenfolge (ConnectionString) festlegen oder indem Sie einen Namen zur Konfiguration der Verbindungszeichenfolge (ConfigFileSectionName) aus der Anwendungskonfigurationsdatei verwenden.

Die auszuführende Abfrage wird in der Sql-Eigenschaft konfiguriert, und die Parameter werden über die Parameters-Auflistung übergeben.

Nach dem Ausführen von DbQueryDataSet wird das DataSet im Result out-Argument (vom Typ TResult, der in der Basisklasse AsyncCodeActivity<TResult> definiert ist) zurückgegeben.

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 BESCHREIBUNG
ProviderName Invarianter Name des ADO.NET-Anbieters. Wenn dieses Argument festgelegt wird, muss ConnectionString ebenfalls festgelegt werden.
ConnectionString Die Verbindungszeichenfolge zum Herstellen einer Datenbankverbindung. Wenn dieses Argument festgelegt wird, muss ProviderName ebenfalls festgelegt werden.
ConfigName Name des Abschnitts in der Konfigurationsdatei, in dem die Verbindungsinformationen gespeichert sind. Wenn dieses Argument festgelegt wird, sind ProviderName und ConnectionString nicht erforderlich.
CommandType Der auszuführende DbCommand-Typ.
Sql Der auszuführende SQL-Befehl.
Parameter Auflistung der Parameter der SQL-Abfrage.
Ergebnis DataSet, das nach Ausführung der Abfrage zurückgegeben wird.

Konfigurieren von Verbindungsinformationen

Für alle Datenbankaktivitäten gelten die gleichen Konfigurationsparameter. Für die Konfiguration gibt es zwei Möglichkeiten:

  • ConnectionString + InvariantName: Legen Sie den invarianten Namen und die Verbindungszeichenfolge für den ADO.NET-Anbieter fest.

    Activity dbSelectCount = new DbQueryScalar<DateTime>()
    {
        ProviderName = "System.Data.SqlClient",
        ConnectionString = @"Data Source=.\SQLExpress;
                              Initial Catalog=DbActivitiesSample;
                              Integrated Security=True",
        Sql = "SELECT GetDate()"
    };
    
  • ConfigName: Geben Sie den Namen des Abschnitts in der Konfigurationsdatei an, der die Verbindungsinformationen enthält.

    <connectionStrings>
        <add name="DbActivitiesSample"
              providerName="System.Data.SqlClient"
              connectionString="Data Source=.\SQLExpress;Initial Catalog=DbActivitiesSample;Integrated Security=true"/>
      </connectionStrings>
    
  • In der Aktivität:

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

Ausführen des Beispiels

Setupanweisungen

In diesem Beispiel wird eine Datenbank verwendet. Ein Setup- und Ladeskript (Setup.cmd) wird mit dem Beispiel bereitgestellt. Diese Datei muss über die Eingabeaufforderung ausgeführt werden.

Das Skript "Setup.cmd" ruft die Skriptdatei "CreateDb.sql" auf, die SQL-Befehle zur Ausführung der folgenden Vorgänge enthält:

  • Erstellen einer Datenbank mit dem Namen DbActivitiesSample

  • Erstellen der Tabelle "Roles"

  • Erstellen der Tabelle "Employees"

  • Einfügen von drei Datensätzen in die Tabelle "Roles"

  • Einfügen von zwölf Datensätzen in die Tabelle "Employees"

So führen Sie "Setup.cmd" aus
  1. Öffnen Sie eine Eingabeaufforderung.

  2. Navigieren Sie zum Beispielordner "DbActivities".

  3. Geben Sie „setup.cmd“ ein, und drücken Sie die EINGABETASTE.

    Hinweis

    Setup.cmd versucht, das Beispiel auf der SqlExpress-Instanz auf Ihrem lokalen Computer zu installieren. Wenn Sie es auf einer anderen SQL Server-Instanz installieren möchten, aktualisieren Sie "Setup.cmd" mit dem neuen Instanznamen.

So deinstallieren Sie die Beispieldatenbank
  1. Führen Sie "Cleanup.cmd" aus dem Beispielordner über eine Eingabeaufforderung aus.
So führen Sie das Beispiel aus
  1. Öffnen der Projektmappe in Visual Studio

  2. Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu kompilieren.

  3. Um das Beispiel ohne Debugging auszuführen, drücken Sie STRG+F5.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.

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