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

Учитывая схему XML, которая соответствует стандарту языка определения схемы XML (XSD), можно создать строго типизированную DataSet с помощью средства XSD. exe, поставляемого с пакетом средств разработки программного обеспечения (SDK) для Windows.Given an XML Schema that complies with the XML Schema definition language (XSD) standard, you can generate a strongly typed DataSet using the XSD.exe tool provided with the Windows Software Development Kit (SDK).

(Чтобы создать XSD из таблиц базы данных, см. раздел WriteXmlSchema или Работа с наборами DataSet в Visual Studio).(To create an xsd from database tables, see WriteXmlSchema or Working with Datasets in Visual Studio).

В следующем коде показан синтаксис для создания набора данных с помощью этого средства.The following code shows the syntax for generating a DataSet using this tool.

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

В этом синтаксисе директива /d указывает средству создать набор данных, а /l: указывает инструменту, какой язык следует использовать (например, C# или Visual Basic .NET).In this syntax, the /d directive tells the tool to generate a DataSet, and the /l: tells the tool what language to use (for example, C# or Visual Basic .NET). Необязательная директива /eld указывает, что можно использовать LINQ to DataSet для запроса к созданному набору данных.The optional /eld directive specifies that you can use LINQ to DataSet to query against the generated DataSet. Данный параметр используется при указании параметра /d.This option is used when the /d option is also specified. Дополнительные сведения см. в разделе запросы к типизированным наборам данных.For more information, see Querying Typed DataSets. Необязательная директива /n: указывает, что средство также создает пространство имен для набора данных с именем кссдсчема. Namespace.The optional /n: directive tells the tool to also generate a namespace for the DataSet called XSDSchema.Namespace. Выходом команды является файл XSDSchemaFileName.cs, который можно скомпилировать и использовать в приложении ADO.NET.The output of the command is XSDSchemaFileName.cs, which can be compiled and used in an ADO.NET application. Созданный код можно скомпилировать в виде библиотеки или модуля.The generated code can be compiled as a library or a module.

В следующем коде показан синтаксис для компиляции созданного кода в виде библиотеки с помощью компилятора C# (csc.exe).The following code shows the syntax for compiling the generated code as a library using the C# compiler (csc.exe).

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

Директива /t: служит для этого инструмента указанием по компиляции библиотеки, а директива /r: указывает зависимые библиотеки, которые необходимо скомпилировать.The /t: directive tells the tool to compile to a library, and the /r: directives specify dependent libraries required to compile. Выходом команды является файл XSDSchemaFileName.dll, который можно передать компилятору при компилировании приложения ADO.NET с помощью директивы /r:.The output of the command is XSDSchemaFileName.dll, which can be passed to the compiler when compiling an ADO.NET application with the /r: directive.

В следующем коде показан синтаксис обеспечения доступа к пространству имен, переданному инструменту XSD.exe в приложении ADO.NET.The following code shows the syntax for accessing the namespace passed to XSD.exe in an ADO.NET application.

Imports XSDSchema.Namespace  
using XSDSchema.Namespace;  

В следующем примере кода используется типизированный набор данных с именем кустомердатасет для загрузки списка клиентов из базы данных Northwind .The following code example uses a typed DataSet named CustomerDataSet to load a list of customers from the Northwind database. После загрузки данных с помощью метода Fill в примере выполняется циклический перебор каждого клиента в таблице Customers с помощью объекта типизированной кустомерсров (DataRow).Once the data is loaded using the Fill method, the example loops through each customer in the Customers table using the typed CustomersRow (DataRow) object. Это обеспечивает прямой доступ к столбцу CustomerID , в отличие от датаколумнколлектион.This provides direct access to the CustomerID column, as opposed to through the 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, используемая для примера.The following is the XML Schema used for the example:

<?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>  

См. такжеSee also