Freigeben über


Hinzufügen von zusätzlichen DataTable-Spalten (C#)

von Scott Mitchell

PDF herunterladen

Wenn Sie den TableAdapter-Assistenten verwenden, um ein typisiertes DataSet zu erstellen, enthält die entsprechende DataTable die Spalten, die von der Standard Datenbankabfrage zurückgegeben werden. Es gibt jedoch Fälle, in denen die DataTable zusätzliche Spalten enthalten muss. In diesem Tutorial erfahren Sie, warum gespeicherte Prozeduren empfohlen werden, wenn zusätzliche DataTable-Spalten benötigt werden.

Einführung

Beim Hinzufügen eines TableAdapter zu einem typisierten DataSet wird das entsprechende DataTable-Schema von der TableAdapter-Standard-Abfrage bestimmt. Wenn die Standard Abfrage beispielsweise die Datenfelder A, B und C zurückgibt, verfügt die DataTable über drei entsprechende Spalten mit dem Namen A, B und C. Zusätzlich zur Standard Abfrage kann ein TableAdapter zusätzliche Abfragen enthalten, die möglicherweise eine Teilmenge der Daten basierend auf einem Parameter zurückgeben. Für instance enthält sie neben der ProductsTableAdapter Abfrage s Standard, die Informationen zu allen Produkten zurückgibt, auch Methoden wie GetProductsByCategoryID(categoryID) und GetProductByProductID(productID), die bestimmte Produktinformationen basierend auf einem angegebenen Parameter zurückgeben.

Das Modell, dass das DataTable-Schema die TableAdapter-Standard Abfrage widerspiegelt, funktioniert gut, wenn alle TableAdapter-Methoden dieselben oder weniger Datenfelder als die in der Standard-Abfrage angegebenen zurückgeben. Wenn eine TableAdapter-Methode zusätzliche Datenfelder zurückgeben muss, sollten wir das DataTable-Schema entsprechend erweitern. Im Tutorial Master/Detail Using a Bulleted List of Master Records with a Details DataList haben wir eine Methode hinzugefügt, die die CategoriesTableAdapterCategoryIDdatenfelder , CategoryName, und Description zurückgegeben hat, die in der Standard Abfrage plus NumberOfProductsdefiniert sind, ein zusätzliches Datenfeld, das die Anzahl der mit jeder Kategorie verknüpften Produkte angibt. Wir haben manuell eine neue Spalte hinzugefügt, um den CategoriesDataTableNumberOfProducts Datenfeldwert aus dieser neuen Methode zu erfassen.

Wie im Tutorial Zum Hochladen von Dateien erläutert, muss bei TableAdapters, die Ad-hoc-SQL-Anweisungen verwenden und Über Methoden verfügen, deren Datenfelder nicht genau mit der Standard Abfrage übereinstimmen, mit großer Sorgfalt behandelt werden. Wenn der TableAdapter-Konfigurations-Assistent erneut ausgeführt wird, werden alle TableAdapter-Methoden aktualisiert, sodass ihre Datenfeldliste mit der Standard Abfrage übereinstimmt. Folglich werden alle Methoden mit angepassten Spaltenlisten in die Spaltenliste der Standard Abfrage rückgängig machen und nicht die erwarteten Daten zurückgeben. Dieses Problem tritt nicht auf, wenn gespeicherte Prozeduren verwendet werden.

In diesem Tutorial erfahren Sie, wie Sie ein DataTable-Schema erweitern, um zusätzliche Spalten einzuschließen. Aufgrund der Sprödigkeit des TableAdapters bei Verwendung von Ad-hoc-SQL-Anweisungen verwenden wir in diesem Tutorial gespeicherte Prozeduren. Weitere Informationen zum Konfigurieren eines TableAdapters finden Sie im Tutorial Zum Erstellen neuer gespeicherter Prozeduren für das Typed DataSet s TableAdapters-Tutorial .

Schritt 1: Hinzufügen einerPriceQuartileSpalte zumProductsDataTable

Im Tutorial Erstellen neuer gespeicherter Prozeduren für das Typed DataSet s TableAdapters-Tutorial haben wir ein typisiertes DataSet mit dem Namen NorthwindWithSprocserstellt. Dieses DataSet enthält derzeit zwei DataTables: ProductsDataTable und EmployeesDataTable. Verfügt ProductsTableAdapter über die folgenden drei Methoden:

  • GetProducts– die Standard-Abfrage, die alle Datensätze aus der Products Tabelle zurückgibt
  • GetProductsByCategoryID(categoryID) – Gibt alle Produkte mit der angegebenen categoryID zurück.
  • GetProductByProductID(productID) – gibt das bestimmte Produkt mit der angegebenen productID zurück.

Die Standard Abfrage und die beiden zusätzlichen Methoden geben alle denselben Satz von Datenfeldern zurück, nämlich alle Spalten aus der Products Tabelle. Es gibt keine korrelierten Unterabfragen oder JOIN s, die verwandte Daten aus den Categories Tabellen oder Suppliers ziehen. Daher verfügt das über ProductsDataTable eine entsprechende Spalte für jedes Feld in der Products Tabelle.

Fügen Sie für dieses Tutorial eine Methode zu dem namens GetProductsWithPriceQuartile hinzu, die ProductsTableAdapter alle Produkte zurückgibt. Zusätzlich zu den Standard-Produktdatenfeldern enthält auch ein PriceQuartile Datenfeld, GetProductsWithPriceQuartile das angibt, unter welchem Quartil der Produktpreis fällt. Zum Beispiel haben diejenigen Produkte, deren Preise in den teuersten 25 % liegen, einen PriceQuartile Wert von 1, während diejenigen, deren Preise in den unteren 25 % fallen, einen Wert von 4 haben. Bevor wir uns jedoch um das Erstellen der gespeicherten Prozedur für die Rückgabe dieser Informationen kümmern, müssen wir zuerst aktualisieren ProductsDataTable , um eine Spalte einzuschließen, um die PriceQuartile Ergebnisse zu speichern, wenn die GetProductsWithPriceQuartile Methode verwendet wird.

Öffnen Sie das NorthwindWithSprocs DataSet, und klicken Sie mit der rechten Maustaste auf .ProductsDataTable Wählen Sie im Kontextmenü hinzufügen und dann Spalte aus.

Hinzufügen einer neuen Spalte zur ProductsDataTable

Abbildung 1: Hinzufügen einer neuen Spalte zu (Klicken Sie hier, um dasProductsDataTable Bild in voller Größe anzuzeigen)

Dadurch wird der DataTable eine neue Spalte mit dem Namen Column1 des Typs System.Stringhinzugefügt. Wir müssen den Namen dieser Spalte auf PriceQuartile und ihren Typ aktualisieren, System.Int32 da er verwendet wird, um eine Zahl zwischen 1 und 4 zu enthalten. Wählen Sie die neu hinzugefügte Spalte im ProductsDataTable aus, und legen Sie die Eigenschaft aus dem Eigenschaftenfenster auf PriceQuartile und die DataType -Eigenschaft auf System.Int32festName.

Festlegen der Namen- und Datentypeigenschaften der neuen Spalte

Abbildung 2: Festlegen der neuen Spalten Name und DataType Eigenschaften (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Wie Abbildung 2 zeigt, können zusätzliche Eigenschaften festgelegt werden, z. B. ob die Werte in der Spalte eindeutig sein müssen, ob es sich bei der Spalte um eine Spalte mit automatischer Inkrementierung handelt, ob Datenbankwerte NULL zulässig sind usw. Lassen Sie diese Werte auf ihre Standardwerte festgelegt.

Schritt 2: Erstellen derGetProductsWithPriceQuartileMethode

Nachdem die ProductsDataTable nun aktualisiert wurde, um die PriceQuartile Spalte einzuschließen, können Sie die GetProductsWithPriceQuartile -Methode erstellen. Klicken Sie zunächst mit der rechten Maustaste auf den TableAdapter, und wählen Sie im Kontextmenü Abfrage hinzufügen aus. Dadurch wird der TableAdapter-Abfragekonfigurations-Assistent angezeigt, der uns zuerst fragt, ob wir Ad-hoc-SQL-Anweisungen oder eine neue oder vorhandene gespeicherte Prozedur verwenden möchten. Da wir noch keine gespeicherte Prozedur haben, die die Preisquartildaten zurückgibt, erlauben wir dem TableAdapter, diese gespeicherte Prozedur für uns zu erstellen. Wählen Sie die Option Neue gespeicherte Prozedur erstellen aus, und klicken Sie auf Weiter.

Weisen Sie den TableAdapter-Assistenten an, die gespeicherte Prozedur für uns zu erstellen.

Abbildung 3: Weisen Sie den TableAdapter-Assistenten an, die gespeicherte Prozedur für uns zu erstellen (Klicken Sie hier, um das vollständige Bild anzuzeigen)

Auf dem nachfolgenden Bildschirm in Abbildung 4 fragt uns der Assistent, welcher Abfragetyp hinzugefügt werden soll. Da die GetProductsWithPriceQuartile -Methode alle Spalten und Datensätze aus der Products Tabelle zurückgibt, wählen Sie die Option SELECT, die Zeilen zurückgibt, aus, und klicken Sie auf Weiter.

Unsere Abfrage ist eine SELECT-Anweisung, die mehrere Zeilen zurückgibt.

Abbildung 4: Unsere Abfrage ist eine SELECT Anweisung, die mehrere Zeilen zurückgibt (Klicken Sie hier, um das bild in voller Größe anzuzeigen).

Als Nächstes werden wir zur SELECT Abfrage aufgefordert. Geben Sie die folgende Abfrage in den Assistenten ein:

SELECT ProductID, ProductName, SupplierID, CategoryID, 
       QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, 
       ReorderLevel, Discontinued,
       NTILE(4) OVER (ORDER BY UnitPrice DESC) as PriceQuartile
FROM Products

Die obige Abfrage verwendet SQL Server neue NTILE Funktion von 2005 s, um die Ergebnisse in vier Gruppen zu unterteilen, in denen die Gruppen durch die Werte bestimmt werden, die UnitPrice in absteigender Reihenfolge sortiert sind.

Leider weiß der Abfrage-Generator nicht, wie die OVER Schlüsselwort (keyword) analysiert werden soll, und zeigt beim Analysieren der obigen Abfrage einen Fehler an. Geben Sie daher die obige Abfrage direkt in das Textfeld im Assistenten ein, ohne den Abfrage-Generator zu verwenden.

Hinweis

Weitere Informationen zu NTILE und SQL Server anderen Rangfolgefunktionen von 2005 finden Sie unter ROW_NUMBER (Transact-SQL) und im Abschnitt Rangfolgefunktionen in der SQL Server 2005-Onlinedokumentation.

Nachdem Sie die SELECT Abfrage eingegeben und auf Weiter geklickt haben, werden wir vom Assistenten aufgefordert, einen Namen für die gespeicherte Prozedur anzugeben, die er erstellt. Benennen Sie die neue gespeicherte Prozedur Products_SelectWithPriceQuartile , und klicken Sie auf Weiter.

Benennen Sie die gespeicherte Prozedur Products_SelectWithPriceQuartile

Abbildung 5: Name der gespeicherten Prozedur Products_SelectWithPriceQuartile (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Zuletzt werden wir aufgefordert, die TableAdapter-Methoden zu benennen. Lassen Sie die Kontrollkästchen DataTable ausfüllen und DataTable zurückgeben aktiviert, und nennen Sie die Methoden FillWithPriceQuartile und GetProductsWithPriceQuartile.

Benennen Sie die TableAdapter-Methoden, und klicken Sie auf Fertig stellen.

Abbildung 6: Benennen Sie die TableAdapter-Methoden, und klicken Sie auf Fertig stellen (Klicken Sie, um das vollständige Bild anzuzeigen)

Wenn die SELECT Abfrage angegeben ist und die gespeicherte Prozedur und die TableAdapter-Methoden benannt sind, klicken Sie auf Fertig stellen, um den Assistenten abzuschließen. An diesem Punkt erhalten Sie möglicherweise eine oder zwei Warnungen vom Assistenten, die besagt, dass das SQL-Konstrukt oder die OVER SQL-Anweisung nicht unterstützt wird. Diese Warnungen können ignoriert werden.

Nach Abschluss des Assistenten sollte der TableAdapter die FillWithPriceQuartile Methoden und GetProductsWithPriceQuartile enthalten, und die Datenbank sollte eine gespeicherte Prozedur mit dem Namen Products_SelectWithPriceQuartileenthalten. Nehmen Sie sich einen Moment Zeit, um zu überprüfen, ob der TableAdapter tatsächlich diese neue Methode enthält und die gespeicherte Prozedur ordnungsgemäß der Datenbank hinzugefügt wurde. Wenn Die gespeicherte Prozedur beim Überprüfen der Datenbank nicht angezeigt wird, klicken Sie mit der rechten Maustaste auf den Ordner Gespeicherte Prozeduren, und wählen Sie Aktualisieren aus.

Überprüfen, ob dem TableAdapter eine neue Methode hinzugefügt wurde

Abbildung 7: Überprüfen, ob dem TableAdapter eine neue Methode hinzugefügt wurde

Stellen Sie sicher, dass die Datenbank die Products_SelectWithPriceQuartile gespeicherten Prozedur enthält.

Abbildung 8: Stellen Sie sicher, dass die Datenbank die Products_SelectWithPriceQuartile gespeicherte Prozedur enthält (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Hinweis

Einer der Vorteile der Verwendung gespeicherter Prozeduren anstelle von Ad-hoc-SQL-Anweisungen besteht darin, dass die Spaltenlisten gespeicherter Prozeduren nicht durch die erneute Ausführung des TableAdapter-Konfigurations-Assistenten geändert werden. Überprüfen Sie dies, indem Sie mit der rechten Maustaste auf den TableAdapter klicken, im Kontextmenü die Option Konfigurieren auswählen, um den Assistenten zu starten, und dann auf Fertig stellen klicken, um ihn abzuschließen. Wechseln Sie als Nächstes zur Datenbank, und zeigen Sie die gespeicherte Products_SelectWithPriceQuartile Prozedur an. Beachten Sie, dass die Spaltenliste nicht geändert wurde. Wenn wir Ad-hoc-SQL-Anweisungen verwendet hätten, hätte die erneute Ausführung des TableAdapter-Konfigurations-Assistenten diese Abfragespaltenliste so zurückgesetzt, dass sie der Standard Abfragespaltenliste entspricht, wodurch die NTILE-Anweisung aus der von der GetProductsWithPriceQuartile -Methode verwendeten Abfrage entfernt wurde.

Wenn die Data Access Layer-Methode GetProductsWithPriceQuartile aufgerufen wird, führt TableAdapter die Products_SelectWithPriceQuartile gespeicherte Prozedur aus und fügt der ProductsDataTable für jeden zurückgegebenen Datensatz eine Zeile hinzu. Die von der gespeicherten Prozedur zurückgegebenen Datenfelder werden den ProductsDataTable Spalten s zugeordnet. Da ein PriceQuartile Datenfeld aus der gespeicherten Prozedur zurückgegeben wird, wird sein Wert der ProductsDataTable Spalte s PriceQuartile zugewiesen.

Für die TableAdapter-Methoden, deren Abfragen kein Datenfeld zurückgeben PriceQuartile , ist der Wert der PriceQuartile Spalte der wert, der durch die DefaultValue -Eigenschaft angegeben wird. Wie Abbildung 2 zeigt, ist dieser Wert auf DBNullfestgelegt, der Standardwert. Wenn Sie einen anderen Standardwert bevorzugen, legen Sie einfach die DefaultValue Eigenschaft entsprechend fest. Stellen Sie einfach sicher, dass der DefaultValue Wert für die Spalte s DataType (d. h. System.Int32 für die PriceQuartile Spalte) gültig ist.

An diesem Punkt haben wir die erforderlichen Schritte zum Hinzufügen einer zusätzlichen Spalte zu einer DataTable ausgeführt. Um zu überprüfen, ob diese zusätzliche Spalte wie erwartet funktioniert, erstellen wir eine ASP.NET Seite, auf der Name, Preis und Preisquartil der einzelnen Produkte angezeigt werden. Bevor wir dies tun, müssen wir jedoch zuerst die Geschäftslogikebene aktualisieren, um eine Methode einzuschließen, die die DAL-Methode GetProductsWithPriceQuartile aufruft. Wir aktualisieren die BLL als Nächstes in Schritt 3 und erstellen dann die seite ASP.NET in Schritt 4.

Schritt 3: Erweitern der Geschäftslogikebene

Bevor wir die neue GetProductsWithPriceQuartile Methode aus der Präsentationsebene verwenden, sollten wir zuerst eine entsprechende Methode zur BLL hinzufügen. Öffnen Sie die ProductsBLLWithSprocs Klassendatei, und fügen Sie den folgenden Code hinzu:

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable GetProductsWithPriceQuartile()
{
    return Adapter.GetProductsWithPriceQuartile();
}

Wie die anderen Datenabrufmethoden in ProductsBLLWithSprocsruft die GetProductsWithPriceQuartile Methode einfach die entsprechende GetProductsWithPriceQuartile DAL-Methode auf und gibt ihre Ergebnisse zurück.

Schritt 4: Anzeigen der Preisquartilinformationen in einer ASP.NET Webseite

Mit der BLL-Ergänzung sind wir bereit, eine ASP.NET Seite zu erstellen, die das Preisquartil für jedes Produkt anzeigt. Öffnen Sie die AddingColumns.aspx Seite im AdvancedDAL Ordner, und ziehen Sie eine GridView aus der Toolbox auf die Designer, und legen Sie die ID -Eigenschaft auf festProducts. Binden Sie es über das GridView-Smarttag an eine neue ObjectDataSource mit dem Namen ProductsDataSource. Konfigurieren Sie objectDataSource für die Verwendung der Methode s GetProductsWithPriceQuartile der ProductsBLLWithSprocs Klasse. Da es sich um ein schreibgeschütztes Raster handelt, legen Sie die Dropdownlisten in den Registerkarten UPDATE, INSERT und DELETE auf (Keine) fest.

Konfigurieren der ObjectDataSource für die Verwendung der ProductsBLLWithSprocs-Klasse

Abbildung 9: Konfigurieren der ObjectDataSource für die Verwendung der ProductsBLLWithSprocs -Klasse (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Abrufen von Produktinformationen aus der GetProductsWithPriceQuartile-Methode

Abbildung 10: Abrufen von Produktinformationen aus der GetProductsWithPriceQuartile Methode (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Nach Abschluss des Assistenten Zum Konfigurieren von Datenquellen fügt Visual Studio der GridView automatisch ein BoundField oder CheckBoxField für jedes von der -Methode zurückgegebene Datenfeld hinzu. Eines dieser Datenfelder ist PriceQuartiledie Spalte, die ProductsDataTable wir in Schritt 1 hinzugefügt haben.

Bearbeiten Sie die GridView-Felder, und entfernen Sie alle außer , ProductNameUnitPriceund PriceQuartile BoundFields. Konfigurieren Sie das UnitPrice BoundField so, dass er seinen Wert als Währung formatiert und die UnitPricePriceQuartile BoundFields rechts- bzw. zentriert ausgerichtet ist. Aktualisieren Sie schließlich die verbleibenden BoundFields-Eigenschaften HeaderText auf Product, Price und Price Quartile. Aktivieren Sie außerdem das Kontrollkästchen Sortierung aktivieren über das Smarttag von GridView.

Nach diesen Änderungen sollte das deklarative Markup gridView und ObjectDataSource wie folgt aussehen:

<asp:GridView ID="Products" runat="server" AllowSorting="True"
    AutoGenerateColumns="False" DataKeyNames="ProductID" 
    DataSourceID="ProductsDataSource">
    <Columns>
        <asp:BoundField DataField="ProductName" HeaderText="Product" 
            SortExpression="ProductName" />
        <asp:BoundField DataField="UnitPrice" DataFormatString="{0:c}" 
            HeaderText="Price" HtmlEncode="False" 
            SortExpression="UnitPrice">
            <ItemStyle HorizontalAlign="Right" />
        </asp:BoundField>
        <asp:BoundField DataField="PriceQuartile" HeaderText="Price Quartile" 
            SortExpression="PriceQuartile">
            <ItemStyle HorizontalAlign="Center" />
        </asp:BoundField>
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ProductsDataSource" runat="server" 
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetProductsWithPriceQuartile" 
    TypeName="ProductsBLLWithSprocs">
</asp:ObjectDataSource>

Abbildung 11 zeigt diese Seite, wenn sie über einen Browser aufgerufen wird. Beachten Sie, dass die Produkte zunächst nach ihrem Preis in absteigender Reihenfolge bestellt werden, wobei jedem Produkt ein entsprechender PriceQuartile Wert zugewiesen wird. Natürlich können diese Daten nach anderen Kriterien sortiert werden, wobei der Wert der Preisquartilspalte weiterhin die Rangfolge des Produkts in Bezug auf den Preis widerspiegelt (siehe Abbildung 12).

Die Produkte werden nach ihren Preisen bestellt.

Abbildung 11: Die Produkte werden nach ihren Preisen bestellt (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Die Produkte werden nach ihrem Namen bestellt.

Abbildung 12: Die Produkte werden nach ihrem Namen bestellt (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Hinweis

Mit einigen Codezeilen konnten wir die GridView erweitern, sodass die Produktzeilen basierend auf ihrem PriceQuartile Wert eingefärbt werden. Wir könnten diese Produkte im ersten Quartil hellgrün färben, jene im zweiten Quartil ein hellgelb usw. Ich ermutige Sie, sich einen Moment Zeit zu nehmen, um diese Funktionalität hinzuzufügen. Wenn Sie eine Aktualisierung zum Formatieren einer GridView benötigen, lesen Sie das Tutorial Benutzerdefinierte Formatierung basierend auf Daten .

Ein alternativer Ansatz: Erstellen eines weiteren TableAdapter

Wie wir in diesem Tutorial gezeigt haben, können wir beim Hinzufügen einer Methode zu einem TableAdapter, die andere Datenfelder als die von der Standard Abfrage geschriebenen zurückgibt, der DataTable entsprechende Spalten hinzufügen. Ein solcher Ansatz funktioniert jedoch nur dann gut, wenn im TableAdapter eine kleine Anzahl von Methoden vorhanden ist, die unterschiedliche Datenfelder zurückgeben, und wenn diese alternativen Datenfelder nicht zu stark von der Standard Abfrage abweichen.

Anstatt der DataTable Spalten hinzuzufügen, können Sie stattdessen dem DataSet einen weiteren TableAdapter hinzufügen, der die Methoden aus dem ersten TableAdapter enthält, die unterschiedliche Datenfelder zurückgeben. In diesem Tutorial hätten wir dem PriceQuartile DataSet einen zusätzlichen TableAdapter mit dem Namen ProductsWithPriceQuartileTableAdapter hinzufügen können, der die Products_SelectWithPriceQuartile gespeicherte Prozedur als Standard Abfrage verwendet hat, anstatt die Spalte ProductsDataTable hinzuzufügen (wo sie nur von der GetProductsWithPriceQuartile -Methode verwendet wird). ASP.NET Seiten, die Produktinformationen mit dem Preisquartil abrufen mussten, verwenden, ProductsWithPriceQuartileTableAdapterwährend diejenigen, die nicht waren, weiterhin verwenden ProductsTableAdapterkonnten.

Durch Das Hinzufügen eines neuen TableAdapters bleiben die DataTables untarnished und ihre Spalten Spiegel die Datenfelder, die von ihren TableAdapter-Methoden zurückgegeben werden. Zusätzliche TableAdapters können jedoch wiederholte Aufgaben und Funktionen einführen. Wenn beispielsweise diese ASP.NET Seiten, auf denen die PriceQuartile Spalte angezeigt wurde, auch Unterstützung für Einfüge-, Update- und Löschunterstützung bereitstellen müssten, müssten die ProductsWithPriceQuartileTableAdapter Eigenschaften , UpdateCommandund DeleteCommand ordnungsgemäß konfiguriert seinInsertCommand. Während diese Eigenschaften das ProductsTableAdapter s Spiegel würden, führt diese Konfiguration einen zusätzlichen Schritt ein. Darüber hinaus gibt es jetzt zwei Möglichkeiten, ein Produkt zu aktualisieren, zu löschen oder der Datenbank hinzuzufügen – über die ProductsTableAdapter Klassen und ProductsWithPriceQuartileTableAdapter .

Der Download für dieses Tutorial enthält eine ProductsWithPriceQuartileTableAdapter Klasse im DataSet, die NorthwindWithSprocs diesen alternativen Ansatz veranschaulicht.

Zusammenfassung

In den meisten Szenarien geben alle Methoden in einem TableAdapter denselben Satz von Datenfeldern zurück, aber es gibt Zeiten, in denen eine oder zwei bestimmte Methoden ein zusätzliches Feld zurückgeben müssen. Beispielsweise haben wir im Tutorial Master/Detail Using a Bulleted List of Master Records with a Details DataList eine Methode hinzugefügt, die CategoriesTableAdapter zusätzlich zu den Datenfeldern der Standard Abfrage ein NumberOfProducts Feld zurückgegeben hat, das die Anzahl der mit den einzelnen Kategorien verknüpften Produkte angibt. In diesem Tutorial haben wir uns mit dem Hinzufügen einer Methode in der befasst, die ProductsTableAdapter zusätzlich zu den Datenfeldern der Standard Abfrage ein PriceQuartile Feld zurückgegeben hat. Um zusätzliche Datenfelder zu erfassen, die von den TableAdapter-Methoden zurückgegeben werden, müssen wir der DataTable entsprechende Spalten hinzufügen.

Wenn Sie das manuelle Hinzufügen von Spalten zur DataTable planen, wird empfohlen, dass der TableAdapter gespeicherte Prozeduren verwendet. Wenn der TableAdapter Ad-hoc-SQL-Anweisungen verwendet, wird jedes Mal ausgeführt, wenn der TableAdapter-Konfigurations-Assistent alle Methodendatenfeldlisten rückgängig machen zu den Datenfeldern ausführt, die von der Standard-Abfrage zurückgegeben werden. Dieses Problem erstreckt sich nicht auf gespeicherte Prozeduren, weshalb sie empfohlen werden und in diesem Tutorial verwendet wurden.

Viel Spaß beim Programmieren!

Zum Autor

Scott Mitchell, Autor von sieben ASP/ASP.NET-Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft-Webtechnologien. Scott arbeitet als unabhängiger Berater, Trainer und Autor. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Er kann unter mitchell@4GuysFromRolla.comoder über seinen Blog erreicht werden, der unter http://ScottOnWriting.NETzu finden ist.

Besonderen Dank an

Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Hauptprüfer für dieses Tutorial waren Randy Schmidt, Jacky Goor, Bernadette Leigh und Hilton Giesenow. Möchten Sie meine anstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie eine Zeile unter abmitchell@4GuysFromRolla.com.