Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;
}
}
}
}