Создание строго типизированных наборов данных

Учитывая xml-схему, которая соответствует стандарту языка определения схемы XML (XSD), можно создать строго типизированный DataSet с помощью средства XSD.exe, предоставленного пакетом средств разработки программного обеспечения Windows (SDK).

(Чтобы создать xsd из таблиц базы данных, см WriteXmlSchema . раздел " Работа с наборами данных" в Visual Studio.

В следующем коде показан синтаксис для создания набора данных с помощью этого средства.

xsd.exe /d /l:CS XSDSchemaFileName.xsd /eld /n:XSDSchema.Namespace  

В этом синтаксисе /d директива сообщает средству создать набор данных, и /l: сообщает инструменту, какой язык следует использовать (например, C# или Visual Basic .NET). Необязательная /eld директива указывает, что для запроса к созданному набору данных можно использовать LINQ to DataSet. Этот параметр используется при указании /d параметра. Дополнительные сведения см. в разделе "Запросы типизированных наборов данных". Необязательная /n: директива сообщает средству также создать пространство имен для набора данных с именем XSDSchema.Namespace. Выходом команды является файл XSDSchemaFileName.cs, который можно скомпилировать и использовать в приложении ADO.NET. Созданный код можно скомпилировать в виде библиотеки или модуля.

В следующем коде показан синтаксис для компиляции созданного кода в виде библиотеки с помощью компилятора C# (csc.exe).

csc.exe /t:library XSDSchemaFileName.cs /r:System.dll /r:System.Data.dll  

Директива /t: служит для этого инструмента указанием по компиляции библиотеки, а директива /r: указывает зависимые библиотеки, которые необходимо скомпилировать. Выходом команды является файл XSDSchemaFileName.dll, который можно передать компилятору при компилировании приложения ADO.NET с помощью директивы /r:.

В следующем коде показан синтаксис обеспечения доступа к пространству имен, переданному инструменту XSD.exe в приложении ADO.NET.

Imports XSDSchema.Namespace  
using XSDSchema.Namespace;  

В следующем примере кода используется типизированный набор данных с именем CustomerDataSet для загрузки списка клиентов из базы данных Northwind . После загрузки данных с помощью метода Fill пример выполняет циклы по каждому клиенту в таблице Customers с помощью объекта Typed CustomersRow (DataRow). Это обеспечивает прямой доступ к столбцу CustomerID , а не через DataColumnCollection.

Dim customers As CustomerDataSet= New CustomerDataSet()  
Dim adapter As SqlDataAdapter New SqlDataAdapter( _  
  "SELECT * FROM dbo.Customers;", _  
  "Data Source=(local);Integrated " & _  
  "Security=SSPI;Initial Catalog=Northwind")  
  
adapter.Fill(customers, "Customers")  
  
Dim customerRow As CustomerDataSet.CustomersRow  
For Each customerRow In customers.Customers  
  Console.WriteLine(customerRow.CustomerID)  
Next  
CustomerDataSet customers = new CustomerDataSet();  
SqlDataAdapter adapter = new SqlDataAdapter(  
  "SELECT * FROM dbo.Customers;",  
  "Data Source=(local);Integrated " +  
  "Security=SSPI;Initial Catalog=Northwind");  
  
adapter.Fill(customers, "Customers");  
  
foreach(CustomerDataSet.CustomersRow customerRow in customers.Customers)  
  Console.WriteLine(customerRow.CustomerID);  

Ниже приведена схема XML, используемая для примера:

<?xml version="1.0" encoding="utf-8"?>  
<xs:schema id="CustomerDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">  
  <xs:element name="CustomerDataSet" msdata:IsDataSet="true">  
    <xs:complexType>  
      <xs:choice maxOccurs="unbounded">  
        <xs:element name="Customers">  
          <xs:complexType>  
            <xs:sequence>  
              <xs:element name="CustomerID" type="xs:string" minOccurs="0" />  
            </xs:sequence>  
          </xs:complexType>  
        </xs:element>  
      </xs:choice>  
    </xs:complexType>  
  </xs:element>  
</xs:schema>  

См. также