Spécification de valeurs XML comme paramètres (ADO.NET)

Mise à jour : November 2007

Si une requête demande un paramètre dont la valeur est une chaîne XML, les développeurs peuvent fournir cette valeur à l'aide d'une instance du type de données SqlXml. Il n'y a réellement pas d'astuces ; les colonnes XML dans SQL Server 2005 acceptent les valeurs de paramètre exactement de la même manière que d'autres types de données.

Exemple

L'application console suivante crée une nouvelle table dans la base de données AdventureWorks. La nouvelle table inclut une colonne nommée SalesID et une colonne XML nommée SalesInfo.

Remarque :

L'exemple de base de données AdventureWorks n'est pas installé par défaut lorsque vous installez SQL Server 2005. Vous pouvez l'installer en exécutant le programme d'installation de SQL Server.

L'exemple prépare un objet SqlCommand à insérer une ligne dans la nouvelle table. Un fichier enregistré fournit les données XML nécessaires pour la colonne SalesInfo.

Pour créer le fichier nécessaire pour l'exécution de l'exemple, créez un nouveau fichier texte dans le même dossier que votre projet. Nommez le fichier MyTestStoreData.xml. Ouvrez le fichier dans Bloc-notes, puis copiez et collez le texte suivant :

<StoreSurvey xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">
  <AnnualSales>300000</AnnualSales>
  <AnnualRevenue>30000</AnnualRevenue>
  <BankName>International Bank</BankName>
  <BusinessType>BM</BusinessType>
  <YearOpened>1970</YearOpened>
  <Specialty>Road</Specialty>
  <SquareFeet>7000</SquareFeet>
  <Brands>3</Brands>
  <Internet>T1</Internet>
  <NumberEmployees>2</NumberEmployees>
</StoreSurvey>

[Visual Basic]

Imports System
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Xml

Module Module1
    Sub Main()

        Using connection As SqlConnection = New SqlConnection(GetConnectionString())
        connection.Open()

        ' Create a sample table (dropping first if it already
        ' exists.)
        Dim commandNewTable As String = _
         "IF EXISTS (SELECT * FROM dbo.sysobjects " & _
         "WHERE id = object_id(N'[dbo].[XmlDataTypeSample]') " & _
         "AND OBJECTPROPERTY(id, N'IsUserTable') = 1) " & _
         "DROP TABLE [dbo].[XmlDataTypeSample];" & _
         "CREATE TABLE [dbo].[XmlDataTypeSample]( " & _
         "[SalesID] [int] IDENTITY(1,1) NOT NULL, " & _
         "[SalesInfo] [xml])"

        Dim commandAdd As New _
         SqlCommand(commandNewTable, connection)
        commandAdd.ExecuteNonQuery()

        Dim commandText As String = _
         "INSERT INTO [dbo].[XmlDataTypeSample] " & _
           "([SalesInfo] ) " & _
           "VALUES(@xmlParameter )"

        Dim command As New SqlCommand(commandText, connection)

        ' Read the saved XML document as a 
        ' SqlXml-data typed variable.
        Dim newXml As SqlXml = _
         New SqlXml(New XmlTextReader("MyTestStoreData.xml"))

        ' Supply the SqlXml value for the value of the parameter.
        command.Parameters.AddWithValue("@xmlParameter", newXml)

        Dim result As Integer = command.ExecuteNonQuery()
        Console.WriteLine(result & " row was added.")
        Console.WriteLine("Press Enter to continue.")
        Console.ReadLine()
    End Using
End Sub
 
    Private Function GetConnectionString() As String
        ' To avoid storing the connection string in your code,            
        ' you can retrieve it from a configuration file. 
        Return "Data Source=(local);Integrated Security=SSPI;" & _
          "Initial Catalog=AdventureWorks"
    End Function
End Module

[C#]

using System;
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using System.Data.SqlTypes;

class Class1
{
    static void Main()
    {
        using (SqlConnection connection = new SqlConnection(GetConnectionString()))
       {
        connection.Open();
        //  Create a sample table (dropping first if it already
        //  exists.)

        string commandNewTable = 
            "IF EXISTS (SELECT * FROM dbo.sysobjects " + 
            "WHERE id = " +
                  "object_id(N'[dbo].[XmlDataTypeSample]') " + 
            "AND OBJECTPROPERTY(id, N'IsUserTable') = 1) " + 
            "DROP TABLE [dbo].[XmlDataTypeSample];" + 
            "CREATE TABLE [dbo].[XmlDataTypeSample]( " + 
            "[SalesID] [int] IDENTITY(1,1) NOT NULL, " + 
            "[SalesInfo] [xml])";
        SqlCommand commandAdd = 
                   new SqlCommand(commandNewTable, connection);
        commandAdd.ExecuteNonQuery();
        string commandText = 
            "INSERT INTO [dbo].[XmlDataTypeSample] " + 
            "([SalesInfo] ) " + 
            "VALUES(@xmlParameter )";
        SqlCommand command = 
                  new SqlCommand(commandText, connection);

        //  Read the saved XML document as a 
        //  SqlXml-data typed variable.
        SqlXml newXml = 
            new SqlXml(new XmlTextReader("MyTestStoreData.xml"));
        
        //  Supply the SqlXml value for the value of the parameter.
        command.Parameters.AddWithValue("@xmlParameter", newXml);

        int result = command.ExecuteNonQuery();
        Console.WriteLine(result + " row was added.");
        Console.WriteLine("Press Enter to continue.");
        Console.ReadLine();
    }
  }

    private static string GetConnectionString()
    {
        // To avoid storing the connection string in your code,            
        // you can retrieve it from a configuration file. 
        return "Data Source=(local);Integrated Security=true;" +
        "Initial Catalog=AdventureWorks; ";
    }
}

Voir aussi

Concepts

Données XML dans SQL Server (ADO.NET)

Référence

SqlXml