Ausführen eines Einfügevorgangs für eine Tabelle in SQL mithilfe des WCF-Kanalmodells
Der SQL-Adapter ermittelt eine Reihe grundlegender Einfüge-, Auswahl-, Update- und Löschvorgänge für SQL Server Datenbanktabellen und -sichten. Mithilfe dieser Vorgänge 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 eines Einfügevorgangs für eine SQL Server Datenbanktabelle mithilfe des WCF-Kanalmodells.
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 Sichten mit dem SQL-Adapter. Weitere Informationen zum Ausführen von Vorgängen für SQL Server mithilfe des WCF-Kanalmodells finden Sie unter Übersicht über das WCF-Kanalmodell mit dem SQL-Adapter.
Informationen zu den in diesem Thema verwendeten Beispielen
Im Beispiel in diesem Thema werden Vorgänge für die Tabelle Employee ausgeführt. 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 Beispiele für den SQL-Adapter. Ein Beispiel, EmployeeInsertOp, das auf diesem Thema basiert, wird ebenfalls mit den SQL-Adapterbeispielen bereitgestellt.
Die Einfügenachricht
Um Vorgänge für die SQL Server-Datenbank mithilfe des WCF-Kanalmodells auszuführen, müssen Sie über die für den Vorgang spezifische Anforderungsnachricht verfügen. Die Anforderungsnachricht zum Ausführen eines Einfügevorgangs für die Tabelle Employee in der SQL Server-Datenbank sieht wie folgt aus:
<Insert xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Rows>
<Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">
<Name>Tom Smith</Name>
<Designation>Manager</Designation>
<Salary>500000</Salary>
</Employee>
</Rows>
</Insert>
Diese Anforderungsnachricht fügt einen Datensatz mit den folgenden Details ein:
Name = Tom Smith
Designation = Manager
Salary = 500000
Sie müssen die Nachricht in eine Datei kopieren, z. B. InsertRequest.xml. Diese Datei wird in diesem Beispiel verwendet, um die Anforderungsnachricht mithilfe des SQL-Adapters an SQL Server zu senden. Weitere Informationen zum Nachrichtenschema für Vorgänge für Tabellen finden Sie unter Nachrichtenschemas für Einfügen, Aktualisieren, Löschen und Auswählen von Vorgängen für Tabellen und Sichten.
Erstellen einer WCF-Kanalanwendung
Dieser Abschnitt enthält Anweisungen zum Erstellen einer WCF-Kanalanwendung zum Ausführen eines Insert-Vorgangs für die Employee-Tabelle.
So erstellen Sie eine WCF-Kanalanwendung zum Einfügen von Datensätzen in die Employee-Tabelle
Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.
Fügen Sie im Projektmappen-Explorer Verweis auf
Microsoft.Adapters.Sql
,Microsoft.ServiceModel.Channels
,System.ServiceModel
undSystem.Runtime.Serialization
hinzu.Öffnen Sie die Datei Program.cs, und fügen Sie die folgenden Namespaces hinzu:
Microsoft.Adapters.Sql
Microsoft.ServiceModel.Channels
System.ServiceModel
System.ServiceModel.Channels
System.Xml
Erstellen Sie die Bindung und den Endpunkt.
SqlAdapterBinding binding = new SqlAdapterBinding(); EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");
Erstellen und öffnen Sie die Kanalfactory. Diese Anwendung sendet eine Anforderungsnachricht an SQL Server und empfängt eine Antwort. Daher müssen Sie die IRequestChannel-Schnittstelle implementieren.
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, address); factory.Credentials.UserName.UserName = "<Enter user name here>"; factory.Credentials.UserName.Password = "<Enter password here>"; factory.Open();
Erstellen und öffnen Sie den Kanal.
IRequestChannel channel = factory.CreateChannel(); channel.Open();
Erstellen und senden Sie die Anforderungsnachricht.
XmlReader readerIn; Console.WriteLine("Creating the message"); try { readerIn = XmlReader.Create("InsertRequest.xml"); Console.WriteLine("Reader created"); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Message messageIn = Message.CreateMessage(MessageVersion.Default, "TableOp/Insert/dbo/Employee", readerIn); Message messageOut = channel.Request(messageIn);
Beim Erstellen der Anforderungsnachricht müssen Sie die Meldungsaktion angeben, die die Aktion angibt, die der Adapter für die SQL Server Tabelle ausführt. Um einen Einfügevorgang für die Tabelle Employee auszuführen, lautet
TableOp/Insert/dbo/Employee
die Meldungsaktion . Informationen dazu, wie Sie die Nachrichtenaktion für verschiedene Vorgänge für Tabellen bestimmen können, finden Sie unter Nachrichtenschemas für Einfügen, Aktualisieren, Löschen und Auswählen von Vorgängen für Tabellen und Sichten.Rufen Sie die Antwortnachricht ab.
XmlReader readerOut = messageOut.GetReaderAtBodyContents(); XmlDocument doc = new XmlDocument(); doc.Load(readerOut); doc.Save("C:\\Response.xml");
Schließen Sie die Nachrichten-, Kanal- und Kanalfactory.
messageOut.Close(); channel.Close(); factory.Close();
Erstellen Sie das Projekt. Nachdem Sie das Projekt erstellt haben, müssen Sie die folgenden Aufgaben ausführen:
Kopieren Sie die Anforderungsnachricht InsertRequest.xml am selben Speicherort wie die ausführbare Datei Ihres Projekts. In der Regel ist dieser Speicherort \bin\Debug\ in Ihrem Projektverzeichnis.
Die in diesem Beispiel verwendete Tabelle "Employee" weist eine Spalte des benutzerdefinierten Typs Point (UDT) auf. Daher müssen Sie vor dem Ausführen des Projekts die Assembly für den Punkt-UDT erstellen, wie unter Erstellen von User-Defined Typen beschrieben. Außerdem müssen Sie die Assembly-DLL am selben Speicherort wie die ausführbare Datei des Projekts kopieren. In der Regel ist dieser Speicherort \bin\Debug\ in Ihrem Projektverzeichnis.
Führen Sie die Anwendung aus. Die Antwortnachricht Response.xml wird an dem Speicherort gespeichert, den Sie in der Anwendung angegeben haben. Die Antwortnachricht enthält die ID des neu hinzugefügten Mitarbeiters und sieht wie folgt aus:
<InsertResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <InsertResult> <long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">10006</long> </InsertResult> </InsertResponse>
Da die Tabelle Employee die Employee_ID Spalte als Identitätsspalte enthält, gibt der Insert-Vorgang den Wert für die Identitätsspalte des neu eingefügten Datensatzes zurück. Wenn in einer Tabelle keine Identitätsspalte vorhanden ist, ist der Rückgabewert NULL.
Weitere Informationen
Entwickeln von SQL-Anwendungen mithilfe des WCF-Kanalmodells