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 det XSD.exe verktyg 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 det DataSet så kallade 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 att kompilera 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 ett skrivet DataSet namn 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 Fill metoden loopar exemplet genom varje kund i Customers tabellen med hjälp av det inskrivna CustomersRow objektet (DataRow). Detta ger direkt åtkomst till CustomerID kolumnen, 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>

Se även