Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.After festgelegt 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.Before festgelegt 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
Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.
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.
Fügen Sie im Projektmappen-Explorer verweis auf und
Microsoft.ServiceModel.Channels
hinzuMicrosoft.Adapters.Sql
.Ö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.
Ö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; }
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.
Schließen Sie den Client wie im folgenden Codeausschnitt beschrieben:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
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;
}