Freigeben über


Einfügen, Aktualisieren, Löschen oder Auswählen von Vorgängen in SQL mithilfe des WCF-Dienstmodells

Der Microsoft BizTalk-Adapter für SQL Server ermittelt eine Reihe grundlegender Einfüge-, Auswahl-, Update- und Löschvorgänge für SQL Server Datenbanktabellen und -ansichten. Mit diesen Vorgängen können Sie einfache SQL Insert-, Select-, Update- und Delete-Anweisungen ausführen, die durch eine Where-Klausel für eine Zieltabelle oder -sicht qualifiziert sind. Dieses Thema enthält Anweisungen zum Ausführen dieser Vorgänge mithilfe des WCF-Dienstmodells.

Weitere Informationen dazu, wie der Adapter diese Vorgänge unterstützt, finden Sie unter Einfügen, Aktualisieren, Löschen und Auswählen von Vorgängen für Tabellen und Ansichten mit dem SQL-Adapter.

Hinweis

Wenn Sie Vorgänge für Tabellen ausführen, die Spalten mit benutzerdefinierten Typen enthalten, sollten Sie sich unter Vorgänge für Tabellen und Ansichten mit User-Defined-Typen mithilfe des SQL-Adapters informieren, bevor Sie mit der Entwicklung Ihrer Anwendung beginnen.

Informationen zu den in diesem Thema verwendeten Beispielen

Das Beispiel in diesem Thema führt Vorgänge für die Tabelle Employee aus. Die Tabelle Employee wird erstellt, indem das SQL-Skript ausgeführt wird, das mit den Beispielen bereitgestellt wird. Weitere Informationen zu Beispielen finden Sie unter Adapterbeispiele. Ein Beispiel, EmployeeBasicOps, das auf diesem Thema basiert, wird auch mit den SQL-Adapterbeispielen bereitgestellt.

Die WCF-Clientklasse

Der Name des WCF-Clients, der für die grundlegenden SQL-Vorgänge generiert wurde, die der SQL-Adapter ermittelt, basiert auf dem Namen der Tabelle oder Sicht, wie in der folgenden Tabelle aufgeführt.

SQL Server Datenbankartefakt WCF-Clientname
Tabelle TableOp_[Schema]_[TABLE_NAME]Client
Sicht ViewOp_[Schema]_[VIEW_NAME]Client

[SCHEMA] = Sammlung von SQL Server Artefakten, z. B. dbo.

[TABLE_NAME] = Der Name der Tabelle; Beispiel: Mitarbeiter.

[VIEW_NAME] = Der Name der Ansicht; beispielsweise Employee_View.

Methodensignatur für Aufrufvorgänge in Tabellen

Die folgende Tabelle zeigt die Methodensignaturen für die grundlegenden Vorgänge für eine Tabelle. Die Signaturen sind für eine Ansicht identisch, mit dem Unterschied, dass der Ansichtsnamespace und der Name die der Tabelle ersetzen.

Vorgang Methodensignatur
Einfügen long[] Insert([TABLE_NS].[ TABLE_NAME][] Zeilen);
Select [TABLE_NS]. [TABLE_NAME] [] Select(string COLUMNS, string QUERY);
Aktualisieren int Update([TABLE_NS].[ TABLE_NAME]. RowPair[] Zeilen);
Löschen int Delete([TABLE_NS].[ TABLE_NAME][] Zeilen);

[TABLE_NS] = Der Name des Tabellennamespaces; beispielsweise schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee.

[TABLE_NAME] = Der Name der Tabelle; Beispiel: Mitarbeiter.

Als Beispiel zeigt der folgende Code die Methodensignaturen für eine WCF-Clientklasse, die für die Vorgänge Delete, Insert, Select und Update in der Tabelle Employee unter dem Standardschema "dbo" generiert wurde.

public partial class TableOp_dbo_EmployeeClient : System.ServiceModel.ClientBase<TableOp_dbo_Employee>, TableOp_dbo_Employee {      
    public int Delete(schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] Rows);  
  
    public long[] Insert(schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] Rows);  
  
    public schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] Select(string Columns, string Query);  
  
    public int Update(schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[] Rows);  
}  

In diesem Codeausschnitt ist TableOp_dbo_EmployeeClient der Name der WCF-Klasse in der SqlAdapterBindingClient.cs, die vom Add Adapter Service Reference Plug-In generiert wird.

Parameter für Tabellenvorgänge

In diesem Abschnitt werden die Parameter bereitgestellt, die für jeden Tabellenvorgang erforderlich sind.

Einfügevorgang

Vorgangstyp einfügen RECORDSET
Mehrere Datensätze Eine Auflistung von INSERTRECORDS, die in die Tabelle eingefügt werden soll.

Der Einfügevorgang gibt ein Array des Datentyps Long zurück und speichert ggf. die Identitätswerte der eingefügten Zeilen. Wenn keine Identitätsspalte in einer Tabelle vorhanden ist, ist der Rückgabewert NULL.

Vorgang auswählen

COLUMN_NAMES QUERY
Eine durch Trennzeichen getrennte Liste von Spaltennamen im Ziel; Beispiel: "Employee_ID, Bezeichnung". Die Spaltenliste gibt die Spalten des Ziels an, die im Resultset zurückgegeben werden sollen. Spalten, die nicht in der Spaltenliste angegeben sind, werden im zurückgegebenen Datensatzsatz auf ihre .NET-Standardwerte festgelegt. Für nillierbare Spalten ist dieser Wert NULL. Der Inhalt einer SQL WHERE-Klausel, die die Zielzeilen der Abfrage angibt; Beispiel: "Designation = 'Manager'". Sie können diesen Parameter auf NULL festlegen, um alle Zeilen des Ziels zurückzugeben.

Der Rückgabewert des Select-Vorgangs ist ein stark typisiertes Resultset, das die angegebenen Spalten und Zeilen aus der Zieltabelle oder -sicht enthält.

Updatevorgang

Erste Zeile des Paares Zweite Zeile des Paares
Der erste Datensatz des Datensatzpaars entspricht neuen Werten, die aktualisiert werden müssen, d. h. er entspricht der SET-Klausel der UPDATE-Anweisung. Dies kann mit RowPair.Afterfestgelegt werden. Der zweite Datensatz des Datensatzpaars entspricht den alten Werten der Zeilen, d. h. er entspricht der WHERE-Klausel der UPDATE-Anweisung. Dies kann mit RowPair.Beforefestgelegt werden.

Der Rückgabewert des Updatevorgangs hat den Int32-Datentyp und gibt die Anzahl der aktualisierten Zeilen an.

Wichtig

Beim Angeben des Datensatzes, der aktualisiert werden muss, müssen Sie Werte für alle Spalten angeben, auch wenn nicht alle Werte aktualisiert werden. Wenn eine Zeile beispielsweise fünf Spalten enthält und der Updatevorgang nur 2 Spalten aktualisiert, müssen Sie als Teil von RowPair.Before alle 5 Spaltenwerte übergeben. Für RowPair.After können Sie jedoch nur die Spalten angeben, die aktualisiert werden.

Löschvorgang

Der Delete-Vorgang verwendet als Eingabe ein stark typisiertes Array von Datensätzen. Der Rückgabewert des Delete-Vorgangs hat den Int32-Datentyp und gibt die Anzahl der gelöschten Zeilen an.

Erstellen eines WCF-Clients zum Aufrufen von Vorgängen für Tabellen und Ansichten

Der generische Aktionssatz, der zum Ausführen eines Vorgangs auf SQL Server mithilfe eines WCF-Clients erforderlich ist, umfasst eine Reihe von Aufgaben, die unter Übersicht über das WCF-Dienstmodell mit dem SQL-Adapter beschrieben sind. In diesem Abschnitt wird beschrieben, wie Sie einen WCF-Client erstellen, um einfache Insert-, Select-, Update- und Delete-Vorgänge für eine Tabelle aufzurufen.

So erstellen Sie einen WCF-Client zum Ausführen von Vorgängen für Tabellen

  1. Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.

  2. Generieren Sie die WCF-Clientklasse für die Vorgänge Einfügen, Auswählen, Aktualisieren und Löschen in der Tabelle Employee. Weitere Informationen zum Generieren einer WCF-Clientklasse finden Sie unter Generieren eines WCF-Clients oder WCF-Dienstvertrags für SQL Server Artefakte.

    Wichtig

    Stellen Sie vor dem Generieren der WCF-Clientklasse sicher, dass Sie die EnableBizTalkCompatibilityMode-Bindungseigenschaft auf false festlegen.

  3. Fügen Sie im Projektmappen-Explorer verweis auf und Microsoft.ServiceModel.ChannelshinzuMicrosoft.Adapters.Sql.

  4. Öffnen Sie die Datei Program.cs, und erstellen Sie einen Client, wie im folgenden Codeausschnitt beschrieben.

    
              TableOp_dbo_EmployeeClient client = new TableOp_dbo_EmployeeClient("SqlAdapterBinding_TableOp_dbo_Employee");  
    client.ClientCredentials.UserName.UserName = "<Enter user name here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    In diesem Codeausschnitt ist der WCF-Client, TableOp_dbo_EmployeeClient der in SqlAdapterBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert. SqlAdapterBinding_TableOp_dbo_Employee ist der Name der Clientendpunktkonfiguration und wird im app.config definiert. Diese Datei wird auch vom Add Adapter Service Reference Plug-In generiert und enthält die Bindungseigenschaften und andere Konfigurationseinstellungen.

    Hinweis

    In diesem Codeausschnitt verwenden Sie die Bindungs- und Endpunktadresse aus der Konfigurationsdatei. Sie können diese Werte auch explizit im Code angeben. Weitere Informationen zu den verschiedenen Möglichkeiten zum Angeben der Clientbindung finden Sie unter Konfigurieren einer Clientbindung für den SQL-Adapter.

  5. Öffnen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. Rufen Sie den Einfügevorgang für die Tabelle Employee auf.

    long[] recordsInserted;  
    
    schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] insertRecord =  
    new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[1];  
    
    insertRecord[0] = new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee();  
    insertRecord[0].Name = "John Smith";  
    insertRecord[0].Designation = "Manager";  
    insertRecord[0].Salary = 500000;  
    
    try  
    {  
       Console.WriteLine("Inserting new table entry...");  
       recordsInserted = client.Insert(insertRecord);  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
    Console.WriteLine("Record inserted");  
    Console.WriteLine("Press any key to continue ...");  
    Console.ReadLine();  
    

    Sie können den vorherigen Codeausschnitt ersetzen, um auch Select-, Update- oder Delete-Vorgänge auszuführen. Sie können die Codeausschnitte auch anfügen, um alle Vorgänge in einer einzelnen Anwendung auszuführen. Hier finden Sie Codeausschnitte zum Ausführen dieser Vorgänge.

  7. Schließen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. Erstellen Sie das Projekt, und führen Sie es dann aus. Die Anwendung fügt einen Datensatz in die Tabelle Employee ein.

Vorgang auswählen

Der folgende Code zeigt einen Select-Vorgang, der auf die Tabelle Employee ausgerichtet ist. Der Select-Vorgang wählt den zuletzt in die Tabelle eingefügten Datensatz aus. Die zurückgegebenen Datensätze werden in die Konsole geschrieben.

schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] selectRecords;  
  
try  
{  
   Console.WriteLine("Selecting Row...");  
   selectRecords = client.Select("*", "where [Employee_ID] = (select IDENT_CURRENT('Employee'))");  
}  
  
catch (Exception ex)  
{  
   Console.WriteLine("Exception: " + ex.Message);  
   throw;  
}  
  
Console.WriteLine("The details of the newly added employee are:");  
Console.WriteLine("********************************************");  
for (int i = 0; i < selectRecords.Length; i++)  
{  
   Console.WriteLine("Employee ID        : " + selectRecords[i].Employee_ID);  
   Console.WriteLine("Employee Name      : " + selectRecords[i].Name);  
   Console.WriteLine("Employee Desigation: " + selectRecords[i].Designation);  
   Console.WriteLine();  
}  
Console.WriteLine("********************************************");  
Console.WriteLine("Press any key to continue ...");  
Console.ReadLine();  

Aktualisierungsvorgang

Der folgende Code zeigt einen Updatevorgang, der auf die Tabelle Employee ausgerichtet ist.

int result;  
  
schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair updateRecordPair =  
   new schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair();  
  
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee updateRecord =   
   new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee();  
  
schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[] updateArray =  
   new schemas.microsoft.com.Sql._2008._05.TableOp.dbo.Employee.RowPair[1];  
  
updateRecord = insertRecord[0];  
updateRecord.Name = "Jeff Smith";  
  
updateRecordPair.After = updateRecord;  
updateRecordPair.Before = selectRecords[0];  
  
updateArray[0] = updateRecordPair;  
  
try  
{  
   Console.WriteLine("Updating the database...");  
   result = client.Update(updateArray);  
}  
catch (Exception ex)  
{  
   Console.WriteLine("Exception: " + ex.Message);  
   throw;  
}  
  
Console.WriteLine("Updated Record for {0}", updateRecordPair.Before.Name);  
Console.WriteLine("The new name for the employee is {0}", updateRecordPair.After.Name);  
Console.WriteLine("Press any key to continue ...");  
Console.ReadLine();  

Löschvorgang

Der folgende Code zeigt einen Delete-Vorgang, der auf die Tabelle Employee ausgerichtet ist.

int deleteSuccess;  
  
schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[] deleteRecords =  
   new schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee[1];  
  
deleteRecords = client.Select("*", "where [Employee_ID] = (select IDENT_CURRENT('Employee'))");  
  
Console.WriteLine("Following employees will be deleted from the database:");  
for (int i = 0; i < deleteRecords.Length; i++)  
{  
   Console.WriteLine("Name: {0}", deleteRecords[i].Name);  
}  
Console.WriteLine("Press any key to begin deletion...");  
Console.ReadLine();  
  
try  
{  
   Console.WriteLine("Deleting employee record...");  
   deleteSuccess = client.Delete(deleteRecords);  
}  
  
catch (Exception ex)  
{  
   Console.WriteLine("Exception: " + ex.Message);  
   throw;  
}  

Weitere Informationen

Entwickeln von Anwendungen mithilfe des WCF-Dienstmodells