Exécuter une opération d’insertion sur une table dans SQL à l’aide du modèle de canal WCF
L’adaptateur SQL découvre un ensemble d’opérations d’insertion, de sélection, de mise à jour et de suppression de base de données sur SQL Server tables et vues de base de données. À l’aide de ces opérations, vous pouvez effectuer des instructions SQL Insert, Select, Update et Delete simples qualifiées par une clause Where sur une table ou une vue cible. Cette rubrique fournit des instructions sur l’exécution d’une opération d’insertion sur une table de base de données SQL Server à l’aide du modèle de canal WCF.
Pour plus d’informations sur la façon dont l’adaptateur prend en charge ces opérations, consultez Opérations d’insertion, de mise à jour, de suppression et de sélection sur les tables et les vues avec l’adaptateur SQL. Pour plus d’informations sur l’exécution d’opérations sur SQL Server à l’aide du modèle de canal WCF, consultez Vue d’ensemble du modèle de canal WCF avec l’adaptateur SQL.
À propos des exemples utilisés dans cette rubrique
L’exemple de cette rubrique effectue des opérations sur la table Employee. La table Employee est créée en exécutant le script SQL fourni avec les exemples. Pour plus d’informations sur les exemples, consultez Exemples pour l’adaptateur SQL. Un exemple, EmployeeInsertOp, basé sur cette rubrique, est également fourni avec les exemples d’adaptateur SQL.
Message d’insertion
Pour effectuer des opérations sur la base de données SQL Server à l’aide du modèle de canal WCF, vous devez disposer du message de demande spécifique à l’opération. Le message de demande d’effectuer une opération d’insertion sur la table Employee de la base de données SQL Server ressemble à ce qui suit :
<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>
Ce message de demande insère un enregistrement avec les détails suivants :
Name = Tom Smith
Designation = Manager
Salary = 500000
Vous devez copier le message dans un fichier, par exemple InsertRequest.xml. Ce fichier est utilisé dans cet exemple pour envoyer le message de demande à SQL Server à l’aide de l’adaptateur SQL. Pour plus d’informations sur le schéma de message pour les opérations sur la table, consultez Schémas de message pour les opérations d’insertion, de mise à jour, de suppression et de sélection sur les tables et les vues.
Création d’une application de canal WCF
Cette section fournit des instructions sur la création d’une application de canal WCF pour effectuer une opération d’insertion sur la table Employee.
Pour créer une application de canal WCF pour insérer des enregistrements dans la table Employee
Créez un projet Visual C# dans Visual Studio. Pour cette rubrique, créez une application console.
Dans le Explorateur de solutions, ajoutez une référence à
Microsoft.Adapters.Sql
,Microsoft.ServiceModel.Channels
,System.ServiceModel
etSystem.Runtime.Serialization
.Ouvrez le fichier Program.cs et ajoutez les espaces de noms suivants :
Microsoft.Adapters.Sql
Microsoft.ServiceModel.Channels
System.ServiceModel
System.ServiceModel.Channels
System.Xml
Créez la liaison et le point de terminaison.
SqlAdapterBinding binding = new SqlAdapterBinding(); EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");
Créez et ouvrez la fabrique de canaux. Cette application envoie un message de demande à SQL Server et reçoit une réponse. Vous devez donc implémenter l’interface IRequestChannel.
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();
Créez et ouvrez le canal.
IRequestChannel channel = factory.CreateChannel(); channel.Open();
Créez et envoyez le message de demande.
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);
Lors de la création du message de demande, vous devez spécifier l’action de message qui indique l’action que l’adaptateur effectue sur la table SQL Server. Pour effectuer une opération d’insertion sur la table Employee, l’action de message est
TableOp/Insert/dbo/Employee
. Pour plus d’informations sur la façon de déterminer l’action de message pour diverses opérations sur des tables, consultez Schémas de message pour les opérations d’insertion, de mise à jour, de suppression et de sélection sur les tables et les vues.Obtenez le message de réponse.
XmlReader readerOut = messageOut.GetReaderAtBodyContents(); XmlDocument doc = new XmlDocument(); doc.Load(readerOut); doc.Save("C:\\Response.xml");
Fermez le message, le canal et la fabrique de canaux.
messageOut.Close(); channel.Close(); factory.Close();
Créez le projet. Après avoir généré le projet, vous devez effectuer les tâches suivantes :
Copiez le message de demande, InsertRequest.xml, au même emplacement que l’exécutable de votre projet. En règle générale, cet emplacement est \bin\Debug\ dans le répertoire de votre projet.
La table « Employee » utilisée dans cet exemple comporte une colonne de type UDT (Point user-defined type). Par conséquent, avant d’exécuter le projet, vous devez créer l’assembly pour l’UDT de point, comme décrit dans Création de types User-Defined. Vous devez également copier la DLL d’assembly au même emplacement que l’exécutable du projet. En règle générale, cet emplacement est \bin\Debug\ dans le répertoire de votre projet.
Exécutez l’application. Le message de réponse, Response.xml, est enregistré à l’emplacement que vous avez spécifié dans l’application. Le message de réponse contient l’ID de l’employé nouvellement ajouté et ressemble à ce qui suit :
<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>
Étant donné que la table Employee a la colonne Employee_ID comme colonne d’identité, l’opération Insertion retourne la valeur de la colonne d’identité de l’enregistrement nouvellement inséré. S’il n’existe aucune colonne d’identité dans une table, la valeur de retour est NULL.
Voir aussi
Développer des applications SQL à l’aide du modèle de canal WCF