Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Scott Mitchell
Wenn Sie den TableAdapter-Assistenten zum Erstellen eines typierten DataSets verwenden, enthält die entsprechende DataTable die Spalten, die von der Hauptdatenbankabfrage zurückgegeben werden. Es gibt jedoch Fälle, in denen die DataTable zusätzliche Spalten enthalten muss. In diesem Lernprogramm erfahren Sie, warum gespeicherte Prozeduren empfohlen werden, wenn zusätzliche DataTable-Spalten benötigt werden.
Einleitung
Beim Hinzufügen eines TableAdapters zu einem typierten DataSet wird das entsprechende DataTable-Schema von der TableAdapter-Hauptabfrage bestimmt. Wenn die Hauptabfrage beispielsweise Die Datenfelder A, B und C zurückgibt, enthält die DataTable drei entsprechende Spalten namens A, B und C. Zusätzlich zur Hauptabfrage kann ein TableAdapter zusätzliche Abfragen enthalten, die möglicherweise eine Teilmenge der Daten basierend auf einem Parameter zurückgeben. Neben der ProductsTableAdapter Hauptabfrage, die Informationen zu allen Produkten zurückgibt, enthält sie 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-Hauptabfrage widerspiegelt, funktioniert gut, wenn alle TableAdapter-Methoden dieselben oder weniger Datenfelder zurückgeben als die in der Hauptabfrage angegebenen. Wenn eine TableAdapter-Methode zusätzliche Datenfelder zurückgeben muss, sollten wir das DataTable-Schema entsprechend erweitern. Im Master/Detail Using a Bulleted List of Master Records with a Details DataList-Tutorial haben wir eine Methode zur CategoriesTableAdapter hinzugefügt, die die CategoryID, CategoryName und Description Datenfelder zurückgab, die in der Hauptabfrage definiert sind, plus NumberOfProducts, ein zusätzliches Datenfeld, das die Anzahl der Produkte angibt, die mit jeder Kategorie verbunden sind. Wir haben der neuen Methode manuell eine neue Spalte CategoriesDataTable hinzugefügt, um den NumberOfProducts Datenfeldwert aus dieser neuen Methode zu erfassen.
Wie im Tutorial Hochladen von Dateien besprochen, ist große Vorsicht bei der Arbeit mit TableAdapters geboten, die Ad-hoc-SQL-Anweisungen verwenden und über Methoden verfügen, deren Datenfelder nicht genau mit der Hauptabfrage übereinstimmen. Wenn der TableAdapter-Konfigurations-Assistent erneut ausgeführt wird, werden alle TableAdapter-Methoden aktualisiert, sodass ihre Datenfeldliste der Hauptabfrage entspricht. Folglich werden alle Methoden mit benutzerdefinierten Spaltenlisten auf die Spaltenliste der Hauptabfrage zurückgesetzt und die erwarteten Daten nicht zurückgegeben. Dieses Problem tritt nicht auf, wenn gespeicherte Prozeduren verwendet werden.
In diesem Lernprogramm 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 Lernprogramm gespeicherte Prozeduren. Weitere Informationen zum Konfigurieren von TableAdapters zur Verwendung gespeicherter Prozeduren finden Sie im Lernprogramm "Creating New Stored Procedures for the Typed DataSets TableAdapters".
Schritt 1: Hinzufügen einerPriceQuartileSpalte zurProductsDataTable
Im Lernprogramm zum Erstellen neuer gespeicherter Prozeduren für das Typed DataSet s TableAdapters-Lernprogramm haben wir ein typiertes DataSet mit dem Namen NorthwindWithSprocserstellt. Dieses DataSet enthält derzeit zwei DataTables: ProductsDataTable und EmployeesDataTable. Das ProductsTableAdapter verfügt über die folgenden drei Methoden:
-
GetProducts- die Hauptabfrage, die alle Datensätze aus derProductsTabelle zurückgibt -
GetProductsByCategoryID(categoryID)- gibt alle Produkte mit der angegebenen CategoryID zurück. -
GetProductByProductID(productID)- gibt das jeweilige Produkt mit der angegebenen ProductID zurück.
Die Hauptabfrage 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 zum Abrufen verwandter Daten aus den Categories- oder Suppliers-Tabellen. Daher weist die ProductsDataTable Spalte für jedes Feld in der Products Tabelle eine entsprechende Spalte auf.
In diesem Lernprogramm fügen wir eine Methode zu ProductsTableAdapter hinzu, die GetProductsWithPriceQuartile genannt wird und alle Produkte zurückgibt. Zusätzlich zu den Standard-Produktdatenfeldern wird GetProductsWithPriceQuartile auch ein Datenfeld PriceQuartile enthalten, das angibt, in welches Quartil der Preis des Produkts fällt. Beispielsweise haben diese Produkte, deren Preise in den teuersten 25% liegen, einen PriceQuartile Wert von 1, während diejenigen, deren Preise in die untersten 25% fallen, einen Wert von 4 aufweisen. Bevor wir uns Gedanken über das Erstellen der gespeicherten Prozedur machen, um diese Informationen zurückzugeben, müssen wir jedoch zuerst die ProductsDataTable Spalte aktualisieren, um die PriceQuartile Ergebnisse aufzunehmen, wenn die GetProductsWithPriceQuartile Methode verwendet wird.
Öffnen Sie das NorthwindWithSprocs DataSet, und klicken Sie mit der rechten Maustaste auf das ProductsDataTable. Wählen Sie im Kontextmenü "Hinzufügen" und dann "Spalte" aus.
Abbildung 1: Hinzufügen einer neuen Spalte zum ProductsDataTable(Klicken, um das Bild in voller Größe anzuzeigen)
Dies fügt der DataTable eine neue Spalte hinzu, die den Namen "Spalte1" und den Typ System.String hat. Wir müssen den Namen dieser Spalte auf "PriceQuartile" und ihren Typ auf System.Int32 aktualisieren, da die Spalte verwendet wird, um eine Zahl zwischen 1 und 4 zu halten. Wählen Sie die neu hinzugefügte Spalte im ProductsDataTable aus, und legen Sie im Fenster "Eigenschaften" die Name Eigenschaft auf "PriceQuartile" und die DataType Eigenschaft auf "System.Int32" fest.
Abbildung 2: Festlegen der neuen Spalten Name und DataType Eigenschaften (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Wie in Abbildung 2 dargestellt, gibt es zusätzliche Eigenschaften, die festgelegt werden können, z. B. ob die Werte in der Spalte eindeutig sein müssen, wenn es sich bei der Spalte um eine Spalte mit automatischer Inkrementierung handelt, unabhängig davon, ob Datenbankwerte NULL zulässig sind usw. Lassen Sie diese Werte auf ihren Standardwerten.
Schritt 2: Erstellen derGetProductsWithPriceQuartileMethode
Jetzt, da der ProductsDataTable aktualisiert wurde, um die PriceQuartile-Spalte einzuschließen, sind wir bereit, die GetProductsWithPriceQuartile-Methode zu erstellen. Klicken Sie zunächst mit der rechten Maustaste auf das TableAdapter-Objekt, und wählen Sie im Kontextmenü "Abfrage hinzufügen" aus. Dadurch wird der Assistent für die TableAdapter-Abfragekonfiguration 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, lassen Sie uns das TableAdapter erlauben, diese gespeicherte Prozedur für uns zu erstellen. Wählen Sie die Option "Neue gespeicherte Prozedur erstellen" aus, und klicken Sie auf "Weiter".
Abbildung 3: Weisen Sie den TableAdapter-Assistenten an, die gespeicherte Prozedur für uns zu erstellen (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Auf dem in Abbildung 4 dargestellten Bildschirm fragt uns der Assistent, welche Art von Abfrage hinzugefügt werden soll. Da die GetProductsWithPriceQuartile Methode alle Spalten und Datensätze aus der Products Tabelle zurückgibt, wählen Sie die SELECT-Option aus, die die Zeilenoption zurückgibt, und klicken Sie auf "Weiter".
Abbildung 4: Unsere Abfrage ist eine SELECT Anweisung, die mehrere Zeilen zurückgibt (Klicken Sie, um das Bild in voller Größe anzuzeigen)
Als Nächstes werden wir nach der SELECT-Abfrage gefragt. 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 die neue NTILE FUNKTION SQL Server 2005, um die Ergebnisse in vier Gruppen aufzuteilen, in denen die Gruppen durch die werte bestimmt werden, die UnitPrice in absteigender Reihenfolge sortiert sind.
Leider weiß der Abfrage-Generator nicht, wie das OVER Schlüsselwort analysiert werden soll, und beim Analysieren der obigen Abfrage wird ein Fehler angezeigt. 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 den anderen Rangordnungsfunktionen von SQL Server 2005 finden Sie unter ROW_NUMBER (Transact-SQL) und im Abschnitt "Rangordnungsfunktionen" aus der SQL Server 2005 Online-Dokumentation.
Nachdem Sie die SELECT Abfrage eingegeben und auf "Weiter" geklickt haben, fordert der Assistent uns auf, einen Namen für die gespeicherte Prozedur anzugeben, die erstellt wird. Benennen Sie die neue gespeicherte Prozedur Products_SelectWithPriceQuartile , und klicken Sie auf Weiter.
Abbildung 5: Benennen der gespeicherten Prozedur Products_SelectWithPriceQuartile (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Schließlich werden wir aufgefordert, die TableAdapter-Methoden zu benennen. Lassen Sie sowohl die Kontrollkästchen "DataTable ausfüllen" als auch die Kontrollkästchen "DataTable zurückgeben" aktiviert, und nennen Sie die Methoden FillWithPriceQuartile und GetProductsWithPriceQuartile.
Abbildung 6: Benennen der TableAdapter-Methoden und Klicken auf "Fertig stellen" (Zum Anzeigen des Bilds mit voller Größe klicken)
Mit der spezifizierten SELECT Abfrage und den benannten Methoden für gespeicherte Prozeduren und TableAdapter klicken Sie auf "Abschluss", um den Assistenten fertigzustellen. An diesem Punkt erhalten Sie möglicherweise eins oder zwei Warnungen aus dem Assistenten, die besagen, dass das OVER SQL-Konstrukt oder die SQL-Anweisung nicht unterstützt wird. Diese Warnungen können ignoriert werden.
Nach Abschluss des Assistenten sollte der TableAdapter die Methoden FillWithPriceQuartile und GetProductsWithPriceQuartile enthalten, und die Datenbank sollte eine gespeicherte Prozedur mit dem Namen Products_SelectWithPriceQuartile enthalten. Nehmen Sie sich einen Moment Zeit, um zu überprüfen, ob der TableAdapter diese neue Methode enthält und dass die gespeicherte Prozedur der Datenbank ordnungsgemäß 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.
Abbildung 7: Überprüfen, ob eine neue Methode zum TableAdapter hinzugefügt wurde
Abbildung 8: Sicherstellen, 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 das erneute Ausführen des TableAdapter-Konfigurations-Assistenten die Spaltenlisten der gespeicherten Prozeduren nicht ändert. Überprüfen Sie dies, indem Sie mit der rechten Maustaste auf das TableAdapter-Objekt klicken, im Kontextmenü die Option "Konfigurieren" auswählen, um den Assistenten zu starten, und klicken Sie dann auf "Fertig stellen", 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 das erneute Ausführen des TableAdapter-Konfigurationsassistenten diese Abfragespaltenliste so zurückgesetzt, dass sie der Hauptabfragespaltenliste entspricht, wodurch die NTILE-Anweisung aus der von der GetProductsWithPriceQuartile Methode verwendeten Abfrage entfernt würde.
Wenn die Data Access Layer-Methode GetProductsWithPriceQuartile aufgerufen wird, führt TableAdapter die Products_SelectWithPriceQuartile gespeicherte Prozedur aus und fügt dem ProductsDataTable für jeden zurückgegebenen Datensatz eine Zeile hinzu. Die von der gespeicherten Prozedur zurückgegebenen Datenfelder werden den ProductsDataTable Spalten zugeordnet. Da ein PriceQuartile Datenfeld aus der gespeicherten Prozedur zurückgegeben wird, wird der Wert der ProductsDataTable Spalte s PriceQuartile zugewiesen.
Für diese TableAdapter-Methoden, deren Abfragen kein Datenfeld zurückgeben PriceQuartile , ist der PriceQuartile Spaltenwert der durch die DefaultValue Eigenschaft angegebene Wert. Wie in Abbildung 2 dargestellt, wird dieser Wert auf DBNulldie Standardeinstellung festgelegt. Wenn Sie einen anderen Standardwert bevorzugen, legen Sie einfach die DefaultValue Eigenschaft entsprechend fest. Stellen Sie einfach sicher, dass der DefaultValue Wert gültig ist, wenn man die Spalte DataType betrachtet (d. h. System.Int32 für die PriceQuartile Spalte).
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 jeder Produktname, der Preis und das Preisquartil 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 ASP.NET Seite in Schritt 4.
Schritt 3: Erweitern der Geschäftslogikebene
Bevor wir die neue GetProductsWithPriceQuartile Methode aus der Presentation Layer 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 bei den anderen Datenabrufmethoden in ProductsBLLWithSprocs ruft die GetProductsWithPriceQuartile-Methode einfach die entsprechende GetProductsWithPriceQuartile-Methode des DAL auf und gibt deren Ergebnisse zurück.
Schritt 4: Anzeigen der Preisquartilinformationen in einer ASP.NET Webseite
Mit dem vollständigen BLL-Zusatz können wir eine ASP.NET Seite erstellen, auf der das Preisquartil für jedes Produkt angezeigt wird. Öffnen Sie die AddingColumns.aspx-Seite im AdvancedDAL-Ordner; ziehen Sie ein GridView aus der Toolbox auf den Designer und legen Sie dessen ID-Eigenschaft auf Products fest. Binden Sie das Smarttag von GridView an eine neue ObjectDataSource mit dem Namen ProductsDataSource. Konfigurieren Sie die ObjectDataSource für die Verwendung der ProductsBLLWithSprocs-Klasse, GetProductsWithPriceQuartile-Methode. Da dies ein schreibgeschütztes Raster ist, legen Sie die Dropdownlisten in den Registerkarten UPDATE, INSERT und DELETE auf (Keine) fest.
Abbildung 9: Konfigurieren der ObjectDataSource für die Verwendung der ProductsBLLWithSprocs Klasse (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Abbildung 10: Abrufen von Produktinformationen aus der GetProductsWithPriceQuartile Methode (Klicken, um das Bild in voller Größe anzuzeigen)
Nach Abschluss des Assistenten zum Konfigurieren von Datenquellen fügt Visual Studio automatisch ein BoundField- oder CheckBoxField-Objekt für jedes der von der Methode zurückgegebenen Datenfelder zur GridView hinzu. Eines dieser Datenfelder ist PriceQuartile, die Spalte, die wir zu ProductsDataTable in Schritt 1 hinzugefügt haben.
Bearbeiten Sie die Felder der GridView und entfernen Sie alle außer ProductName, UnitPrice und PriceQuartile BoundFields. Konfigurieren Sie das UnitPrice BoundField so, dass es seinen Wert als Währung formatiert, und dass die UnitPrice und PriceQuartile gebundene Felder rechts- bzw. zentriert ausgerichtet sind. Aktualisieren Sie schließlich die verbleibenden BoundFields-Eigenschaften HeaderText auf "Product", "Price" bzw. "Price Quartile". Aktivieren Sie außerdem das Kontrollkästchen "Sortierung aktivieren" aus dem Smarttag "GridView".
Nach diesen Änderungen sollte das deklarative Markup von 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 besucht wird. Beachten Sie, dass die Produkte zunächst nach ihrem Preis in absteigender Reihenfolge bestellt werden, wobei jedem Produkt ein entsprechender PriceQuartile Wert zugewiesen wurde. Natürlich können diese Daten nach anderen Kriterien sortiert werden, wobei der Spaltenwert "Preis Quartile" weiterhin die Rangfolge des Produkts im Hinblick auf den Preis widerspiegelt (siehe Abbildung 12).
Abbildung 11: Die Produkte werden nach ihren Preisen bestellt (Klicken Sie hier, um das Bild mit voller Größe anzuzeigen)
Abbildung 12: Die Produkte werden nach ihren Namen sortiert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Hinweis
Mit einigen Codezeilen konnten wir die GridView erweitern, sodass sie die Produktzeilen basierend auf ihrem PriceQuartile Wert gefärbt hat. Wir könnten diese Produkte im ersten Quartil ein Hellgrün, diejenigen im zweiten Quartil ein hellgelb und so weiter färben. Ich ermutige Sie, einen Moment Zeit zu nehmen, um diese Funktionalität hinzuzufügen. Wenn Sie eine Aktualisierung für die Formatierung einer GridView benötigen, lesen Sie das Lernprogramm " Benutzerdefinierte Formatierung basierend auf Daten ".
Alternativer Ansatz – Erstellen eines anderen TableAdapters
Wie wir in diesem Lernprogramm gesehen haben, können wir beim Hinzufügen einer Methode zu einem TableAdapter, der andere Datenfelder als die von der Hauptabfrage geschriebenen zurückgibt, entsprechende Spalten zur DataTable hinzufügen. Ein solcher Ansatz funktioniert jedoch nur gut, wenn es eine kleine Anzahl von Methoden im TableAdapter gibt, die unterschiedliche Datenfelder zurückgeben und wenn diese alternativen Datenfelder nicht zu stark von der Hauptabfrage variieren.
Anstatt der DataTable Spalten hinzuzufügen, können Sie stattdessen ein weiteres TableAdapter zum DataSet hinzufügen, das die Methoden aus dem ersten TableAdapter enthält, die unterschiedliche Datenfelder zurückgeben. Für dieses Tutorial könnten wir, anstatt die Spalte PriceQuartile zur ProductsDataTable (wo sie nur von der GetProductsWithPriceQuartile-Methode verwendet wird) hinzuzufügen, dem DataSetProductsWithPriceQuartileTableAdapter, das die gespeicherte Prozedur Products_SelectWithPriceQuartile als Hauptabfrage verwendet, einen zusätzlichen TableAdapter hinzufügen. ASP.NET-Seiten, die Produktinformationen mit dem Preisquartil abrufen mussten, würden die ProductsWithPriceQuartileTableAdapter verwenden, während diejenigen, die das nicht benötigten, weiterhin die ProductsTableAdapter verwenden konnten.
Durch Hinzufügen eines neuen TableAdapters bleiben die DataTables unverändert, und ihre Spalten spiegeln genau die Datenfelder wider, die von den Methoden des TableAdapters zurückgegeben werden. Zusätzliche TableAdapters können jedoch sich wiederholende Aufgaben und Funktionen einführen. Wenn z. B. diese ASP.NET-Seiten, die die PriceQuartile-Spalte angezeigt haben, auch Unterstützung zum Einfügen, Aktualisieren und Löschen benötigten, müssten die zugehörigen Eigenschaften ProductsWithPriceQuartileTableAdapter, InsertCommand und UpdateCommand des DeleteCommand ordnungsgemäß konfiguriert werden. Während diese Eigenschaften die ProductsTableAdapter s spiegeln würden, führt diese Konfiguration einen zusätzlichen Schritt ein. Darüber hinaus gibt es jetzt zwei Möglichkeiten, ein Produkt der Datenbank durch die Klassen ProductsTableAdapter und ProductsWithPriceQuartileTableAdapter zu aktualisieren, zu löschen oder hinzuzufügen.
Der Download für dieses Lernprogramm enthält eine ProductsWithPriceQuartileTableAdapter Klasse im NorthwindWithSprocs DataSet, die 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 bestimmte Methode oder zwei möglicherweise ein zusätzliches Feld zurückgeben müssen. Beispielsweise haben wir im Tutorial "Master/Detail mit einer Aufzählungsliste von Masterdatensätzen und einer Details-Datenliste" eine Methode zu hinzugefügt, die zusätzlich zu den Datenfeldern der Hauptabfrage ein CategoriesTableAdapter Feld zurückgibt, das die Anzahl der Produkte ermittelt, die jeder Kategorie zugeordnet sind. In diesem Tutorial haben wir eine Methode im ProductsTableAdapter betrachtet, die ein PriceQuartile Feld neben den Datenfeldern der Hauptabfrage zurückgibt. 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 das TableAdapter gespeicherte Prozeduren verwendet. Wenn "TableAdapter" AD-hoc-SQL-Anweisungen verwendet, werden bei jedem Ausführen des TableAdapter-Konfigurations-Assistenten alle Methoden-Datenfeldlisten auf die von der Hauptabfrage zurückgegebenen Datenfelder zurückgesetzt. Dieses Problem erstreckt sich nicht auf gespeicherte Prozeduren, weshalb sie empfohlen werden und in diesem Lernprogramm verwendet wurden.
Glückliche Programmierung!
Zum Autor
Scott Mitchell, Autor von sieben ASP/ASP.NET Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft Web Technologies zusammen. Scott arbeitet als unabhängiger Berater, Trainer und Schriftsteller. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Er kann bei mitchell@4GuysFromRolla.comerreicht werden.
Besonderer Dank an
Diese Lernprogrammreihe wurde von vielen hilfreichen Prüfern überprüft. Leitende Prüfer für dieses Lernprogramm waren Randy Schmidt, Jacky Goor, Bernadette Leigh und Hilton Giesenow. Möchten Sie meine bevorstehenden MSDN-Artikel überprüfen? Wenn ja, schicken Sie mir eine Nachricht an mitchell@4GuysFromRolla.com.