Udostępnij za pośrednictwem


Wartości kolumn SQL XML

Pobieranie ADO.NET

Program SQL Server obsługuje typ danych xml, a programiści mogą pobierać zestawy wyników, w tym typu, przy wykorzystaniu standardowego zachowania klasy SqlCommand. Kolumnę xml można pobrać tak samo, jak pobiera się dowolną kolumnę (na przykład w obiekcie SqlDataReader), ale jeśli chcesz pracować z zawartością kolumny jako XML, należy użyć XmlReader.

Example

Poniższa aplikacja konsolowa wybiera dwa wiersze, każdy zawierający kolumnę xml, z tabeli Sales.Store w bazie danych AdventureWorks do wystąpienia SqlDataReader. Dla każdego wiersza wartość xml kolumny jest odczytywana przy użyciu GetSqlXml metody SqlDataReader. Wartość jest przechowywana w obiekcie XmlReader. Należy pamiętać, że należy użyć GetSqlXml metody zamiast GetValue metody , jeśli chcesz ustawić zawartość na zmienną SqlXml ; GetValue zwraca wartość xml kolumny jako ciąg.

Uwaga / Notatka

Przykładowa baza danych AdventureWorks nie jest instalowana domyślnie podczas instalowania programu SQL Server. Można go zainstalować, uruchamiając instalatora programu SQL Server.

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

class Class1
{
    static void Main()
    {
        string c = "Data Source=(local);Integrated Security=true;" +
        "Initial Catalog=AdventureWorks; ";
        GetXmlData(c);
        Console.ReadLine();
    }

    static void GetXmlData(string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            // The query includes two specific customers for simplicity's 
            // sake. A more realistic approach would use a parameter
            // for the CustomerID criteria. The example selects two rows
            // in order to demonstrate reading first from one row to 
            // another, then from one node to another within the xml column.
            string commandText =
                "SELECT Demographics from Sales.Store WHERE " +
                "CustomerID = 3 OR CustomerID = 4";

            SqlCommand commandSales = new SqlCommand(commandText, connection);

            SqlDataReader salesReaderData = commandSales.ExecuteReader();

            //  Multiple rows are returned by the SELECT, so each row
            //  is read and an XmlReader (an xml data type) is set to the 
            //  value of its first (and only) column. 
            int countRow = 1;
            while (salesReaderData.Read())
            //  Must use GetSqlXml here to get a SqlXml type. 
            //  GetValue returns a string instead of SqlXml. 
            {
                SqlXml salesXML =
                    salesReaderData.GetSqlXml(0);
                XmlReader salesReaderXml = salesXML.CreateReader();
                Console.WriteLine("-----Row " + countRow + "-----");

                //  Move to the root. 
                salesReaderXml.MoveToContent();

                //  We know each node type is either Element or Text.
                //  All elements within the root are string values. 
                //  For this simple example, no elements are empty. 
                while (salesReaderXml.Read())
                {
                    if (salesReaderXml.NodeType == XmlNodeType.Element)
                    {
                        string elementLocalName =
                            salesReaderXml.LocalName;
                        salesReaderXml.Read();
                        Console.WriteLine(elementLocalName + ": " +
                            salesReaderXml.Value);
                    }
                }
                countRow = countRow + 1;
            }
        }
    }
}

Dalsze kroki