Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В SQL Server поддерживается тип данных xml, поэтому разработчики могут получать результирующие наборы с данными этого типа с помощью стандартных средств класса SqlCommand. Столбец xml может извлекаться как любой другой столбец (например, в SqlDataReader), но для работы с содержимым столбца в формате XML необходимо использовать XmlReader.
Пример
В следующем консольном приложении для экземпляра SqlDataReader из таблицы Sales.Store базы данных AdventureWorks выбираются две строки, каждая из которых содержит столбец xml. Для каждой строки значение столбца xml считывается с помощью метода GetSqlXml из SqlDataReader. Это значение сохраняется в XmlReader. Обратите внимание, что для сохранения содержимого в переменную GetSqlXml необходимо использовать метод GetValue, а не SqlXml, так как GetValue возвращает значение столбца xml в формате строки.
Примечание.
Образец базы данных AdventureWorks не устанавливается по умолчанию при установке SQL Server. Чтобы установить его, запустите программу установки 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;
}
}
}
}