Generera starkt typerade datauppsättningar
Med ett XML-schema som uppfyller XSD-standarden (XML Schema Definition Language) kan du generera ett starkt skrivet DataSet med hjälp av verktyget XSD.exe som medföljer Windows Software Development Kit (SDK).
(Information om hur du skapar en xsd från databastabeller WriteXmlSchema finns i eller Arbeta med datauppsättningar i Visual Studio).
Följande kod visar syntaxen för att generera en DataSet med hjälp av det här verktyget.
xsd.exe /d /l:CS XSDSchemaFileName.xsd /eld /n:XSDSchema.Namespace
I den här syntaxen /d
instruerar direktivet verktyget att generera en DataSet och /l:
talar om för verktyget vilket språk som ska användas (till exempel C# eller Visual Basic .NET). Det valfria /eld
direktivet anger att du kan använda LINQ till DataSet för att köra frågor mot den genererade DataSeten. Det här alternativet används när alternativet /d
också anges. Mer information finns i Fråga efter inskrivna datauppsättningar. Det valfria /n:
direktivet instruerar verktyget att också generera ett namnområde för DataSet med namnet XSDSchema.Namespace. Kommandots utdata är XSDSchemaFileName.cs, som kan kompileras och användas i ett ADO.NET program. Den genererade koden kan kompileras som ett bibliotek eller en modul.
Följande kod visar syntaxen för kompilering av den genererade koden som ett bibliotek med hjälp av C#-kompilatorn (csc.exe).
csc.exe /t:library XSDSchemaFileName.cs /r:System.dll /r:System.Data.dll
Direktivet /t:
instruerar verktyget att kompilera till ett bibliotek, och direktiven /r:
anger beroende bibliotek som krävs för kompilering. Kommandots utdata är XSDSchemaFileName.dll, som kan skickas till kompilatorn när ett ADO.NET program kompileras med /r:
direktivet.
Följande kod visar syntaxen för åtkomst till namnområdet som skickas till XSD.exe i ett ADO.NET program.
Imports XSDSchema.Namespace
using XSDSchema.Namespace;
I följande kodexempel används en typbaserad DataSet med namnet CustomerDataSet för att läsa in en lista över kunder från Northwind-databasen . När data har lästs in med hjälp av fyllningsmetoden loopar exemplet genom varje kund i tabellen Kunder med hjälp av det inskrivna objektet CustomersRow (DataRow). Detta ger direkt åtkomst till kolumnen CustomerID , till skillnad från via 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);
Följande är det XML-schema som används för exemplet:
<?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>