Создание объектов DataSet со строгой типизацией (ADO.NET)
При наличии схемы XML, соответствующей стандарту языка XSD, можно создать объект DataSet со строгой типизацией с помощью инструмента XSD.exe, предоставляемого Пакет средств разработки программного обеспечения (SDK) для Windows.
В следующем коде показан синтаксис создания DataSet с помощью данного инструмента.
xsd.exe /d /l:CS XSDSchemaFileName.xsd /eld /n:XSDSchema.Namespace
В этом синтаксисе директива /d служит для указанного инструмента указанием по созданию объекта DataSet, а директива /l: предписывает используемый язык (например, C# или Visual Basic .NET). Дополнительная директива /eld указывает на возможность использования LINQ to DataSet для создания запроса к созданному DataSet. Данный параметр используется при указании параметра /d. Дополнительные сведения см. в разделе Запрос к типизированным объектам DataSet. Дополнительная директива /n: служит для этого инструмента указанием по созданию пространства имен для DataSet с именем 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;
В следующем примере кода используется типизированный объект DataSet с именем CustomerDataSet для загрузки списка клиентов из базы данных Northwind. После загрузки данных с помощью метода Fill в этом примере кода происходит обработка в цикле данных о каждом заказчике из таблицы Customers с помощью типизированного объекта 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: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>