Zadání hodnot XML jako parametrů

Stáhnout ADO.NET

Pokud dotaz vyžaduje parametr, jehož hodnota je řetězec XML, můžou vývojáři tuto hodnotu zadat pomocí instance datového typu SqlXml . Opravdu neexistují žádné triky; Sloupce XML v SQL Serveru přijímají hodnoty parametrů stejným způsobem jako jiné datové typy.

Example

Následující konzolová aplikace vytvoří novou tabulku v databázi AdventureWorks . Nová tabulka obsahuje sloupec s názvem SalesID a sloupec XML s názvem SalesInfo.

Poznámka:

Ukázková databáze AdventureWorks není ve výchozím nastavení nainstalována při instalaci SQL Serveru. Můžete ho nainstalovat spuštěním instalačního programu SYSTÉMU SQL Server.

Příklad připraví SqlCommand objekt pro vložení řádku do nové tabulky. Uložený soubor poskytuje data XML potřebná pro sloupec SalesInfo .

Pokud chcete vytvořit soubor potřebný ke spuštění příkladu, vytvořte nový textový soubor ve stejné složce jako projekt. Pojmenujte soubor MyTestStoreData.xml. Otevřete soubor v Poznámkovém bloku a zkopírujte a vložte následující text:

<StoreSurvey xmlns="http://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>  
using System;  
using System.Data;  
using Microsoft.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; ";  
    }  
}