Partager via


Insérer, mettre à jour, supprimer ou sélectionner des opérations dans SQL à l’aide du modèle de service WCF

L’adaptateur Microsoft BizTalk pour SQL Server 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 de ces opérations à l’aide du modèle de service 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.

Notes

Si vous effectuez une opération sur des tables qui ont des colonnes de types définis par l’utilisateur, veillez à vous reporter à Opérations sur les tables et les vues avec des types User-Defined à l’aide de l’adaptateur SQL avant de commencer à développer votre application.

À 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 d’adaptateurs. Un exemple, EmployeeBasicOps, basé sur cette rubrique, est également fourni avec les exemples d’adaptateur SQL.

Classe de client WCF

Le nom du client WCF généré pour les opérations SQL de base que l’adaptateur SQL découvre est basé sur le nom de la table ou de la vue, comme indiqué dans le tableau suivant.

artefact de base de données SQL Server Nom du client WCF
Table de charge de travail TableOp_[Schéma]_[TABLE_NAME]Client
Affichage ViewOp_[Schéma]_[VIEW_NAME]Client

[SCHEMA] = Collection d’artefacts SQL Server ; par exemple, dbo.

[TABLE_NAME] = Nom de la table ; par exemple, Employee.

[VIEW_NAME] = Nom de la vue ; par exemple, Employee_View.

Signature de méthode pour les opérations d’appel sur les tables

Le tableau suivant montre les signatures de méthode pour les opérations de base sur une table. Les signatures sont les mêmes pour une vue, sauf que l’espace de noms et le nom de la vue remplacent ceux de la table.

Opération Signature de méthode
Insérer long[] Insert([TABLE_NS].[ TABLE_NAME][] Lignes) ;
Sélectionnez [TABLE_NS]. [TABLE_NAME] [] Select(string COLUMNS, string QUERY) ;
Update int Update([TABLE_NS].[ TABLE_NAME]. RowPair[] Rows) ;
Supprimer int Delete([TABLE_NS].[ TABLE_NAME][] Lignes) ;

[TABLE_NS] = Nom de l’espace de noms de table ; par exemple, schemas.microsoft.com.Sql._2008._05.Types.Tables.dbo.Employee.

[TABLE_NAME] = Nom de la table ; par exemple, Employee.

À titre d’exemple, le code suivant montre les signatures de méthode pour une classe de client WCF générées pour les opérations Delete, Insert, Select et Update sur la table Employee sous le schéma « dbo » par défaut.

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);  
}  

Dans cet extrait de code, TableOp_dbo_EmployeeClient est le nom de la classe WCF dans le fichier SqlAdapterBindingClient.cs généré par le plug-in Add Adapter Service Reference.

Paramètres pour les opérations de table

Cette section fournit les paramètres requis par chaque opération de table

Opération d’insertion

Type d’opération d’insertion RECORDSET
Enregistrement multiple Collection d’INSERTRECORDS qui doit être insérée dans le tableau.

L’opération d’insertion retourne un tableau de type de données Long et stocke les valeurs d’identité des lignes insérées, le cas échéant. S’il n’y a pas de colonne d’identité dans une table, la valeur de retour est NULL.

Sélectionner une opération

COLUMN_NAMES QUERY
Liste délimitée par des virgules de noms de colonnes dans la cible ; par exemple, « Employee_ID, Désignation ». La liste de colonnes spécifie les colonnes de la cible qui doivent être retournées dans le jeu de résultats. Les colonnes non spécifiées dans la liste de colonnes seront définies sur leurs valeurs par défaut .NET dans le jeu d’enregistrements retourné. Pour les colonnes nillables, cette valeur est null. Le contenu d’une clause SQL WHERE qui spécifie les lignes cibles de la requête ; par exemple, « Désignation = 'Manager' ». Vous pouvez définir ce paramètre sur null pour renvoyer toutes les lignes de la cible.

La valeur de retour de l’opération Select est un jeu de résultats fortement typé qui contient les colonnes et lignes spécifiées de la table ou de la vue cible.

Opération de mise à jour

Première ligne de la paire Deuxième ligne de la paire
Le premier enregistrement de la paire d’enregistrements correspond aux nouvelles valeurs qui doivent être mises à jour, c’est-à-dire qu’il correspond à la clause SET de l’instruction UPDATE. Cela peut être défini à l’aide de RowPair.After. Le deuxième enregistrement de la paire d’enregistrements correspond aux anciennes valeurs des lignes, c’est-à-dire à la clause WHERE de l’instruction UPDATE. Cela peut être défini à l’aide de RowPair.Before.

La valeur de retour de l’opération Update est de type de données Int32 et indique le nombre de lignes mises à jour.

Important

Lors de la spécification de l’enregistrement qui doit être mis à jour, vous devez fournir des valeurs pour toutes les colonnes, même si toutes les valeurs ne sont pas mises à jour. Par exemple, si une ligne comporte cinq colonnes et que l’opération De mise à jour met à jour uniquement 2 colonnes, dans le cadre de RowPair.Before, vous devez transmettre les 5 valeurs de colonne. Toutefois, pour RowPair.After, vous pouvez spécifier uniquement les colonnes qui seront mises à jour.

Opération de suppression

L’opération Delete prend comme entrée un tableau d’enregistrements fortement typé. La valeur de retour de l’opération Delete est de type de données Int32 et indique le nombre de lignes supprimées.

Création d’un client WCF pour appeler des opérations sur des tables et des vues

L’ensemble générique d’actions requis pour effectuer une opération sur SQL Server à l’aide d’un client WCF implique un ensemble de tâches décrites dans Vue d’ensemble du modèle de service WCF avec l’adaptateur SQL. Cette section explique comment créer un client WCF pour appeler des opérations d’insertion, de sélection, de mise à jour et de suppression de base sur une table.

Pour créer un client WCF pour effectuer des opérations sur des tables

  1. Créez un projet Visual C# dans Visual Studio. Pour cette rubrique, créez une application console.

  2. Générez la classe de client WCF pour les opérations Insert, Select, Update et Delete sur la table Employee. Pour plus d’informations sur la génération d’une classe de client WCF, consultez Générer un client WCF ou un contrat de service WCF pour SQL Server Artifacts.

    Important

    Avant de générer la classe de client WCF, veillez à définir la propriété de liaison EnableBizTalkCompatibilityMode sur false.

  3. Dans le Explorateur de solutions, ajoutez une référence à Microsoft.Adapters.Sql et Microsoft.ServiceModel.Channels.

  4. Ouvrez le fichier Program.cs et créez un client comme décrit dans l’extrait de code ci-dessous.

    
              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>";  
    

    Dans cet extrait de code, TableOp_dbo_EmployeeClient est le client WCF défini dans SqlAdapterBindingClient.cs. Ce fichier est généré par le plug-in Add Adapter Service Reference. SqlAdapterBinding_TableOp_dbo_Employee est le nom de la configuration du point de terminaison client et est défini dans le app.config. Ce fichier est également généré par le plug-in Add Adapter Reference Service et contient les propriétés de liaison et d’autres paramètres de configuration.

    Notes

    Dans cet extrait de code, vous utilisez la liaison et l’adresse de point de terminaison du fichier de configuration. Vous pouvez également spécifier explicitement ces valeurs dans votre code. Pour plus d’informations sur les différentes façons de spécifier la liaison de client, consultez Configurer une liaison cliente pour l’adaptateur SQL.

  5. Ouvrez le client comme décrit dans l’extrait de code ci-dessous :

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. Appelez l’opération Insert sur la table Employee.

    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();  
    

    Vous pouvez remplacer l’extrait de code précédent pour effectuer également des opérations de sélection, de mise à jour ou de suppression. Vous pouvez également ajouter les extraits de code pour effectuer toutes les opérations dans une seule application. Pour obtenir des extraits de code sur la façon d’effectuer ces opérations.

  7. Fermez le client comme décrit dans l’extrait de code ci-dessous :

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. Générez le projet, puis exécutez-le. L’application insère un enregistrement dans la table Employee.

Sélectionner Opération

Le code suivant montre une opération Select qui cible la table Employee. L’opération Sélectionner sélectionne le dernier enregistrement inséré dans la table. Les enregistrements retournés sont écrits dans la console.

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();  

Opération de mise à jour

Le code suivant montre une opération de mise à jour qui cible la table Employee.

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();  

Opération de suppression

Le code suivant montre une opération De suppression qui cible la table Employee.

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;  
}  

Voir aussi

Développer des applications en utilisant le modèle de service WCF