zurück
Autor:
Erstellt am: 23 Nov 2001 00:00

Recordset ist weg- was nun?

In ADO .NET werden Sie vergeblich den Recordset suchen. Ersatzlos gestrichen!

Das erfordert einiges Umdenken. Wie kann ich in Zukunft bloß ohne Cursor und Locktypes leben?

In DOT NET basiert irgendwie alles auf XML und Internet. Insofern werden Daten ohne dauernde Connection im Speicher gehalten. Dies stellt schon den gößten Unterschied zu ADO dar, der per Standard auf offene Connections setzt.

Die Connection wird nach wie vor benötigt, um per Connection String auf die Datenbank zuzugreifen. Es gibt eine elegante Methode den Connection String zentral in der Datei Web.Config abzulegen. So hat man ihn jederzeit im Zugirff und er liegt dort auch einigermaßen sicher vor Fremdzugriff. Dies können Sie in der Sektion "appsettings" machen.

 

<configuration>

    <system.web>

        <appSettings>

           <addkey="DBConn"value="server=(local);database=northwind;Trusted_Connection=yes" />

        </appSettings>

    </system.web>

</configuration>

 

Sie können auch eine eigene Sektion anlegen, dies ist aber ein bisschen komplexer. Dazu gibt's hier in Devtrain einen tiefergehenden Artikel.

Das auslesen wird über die Klasse KonfigurationSettings durchgeführt. Dazu muss der Namespace System.Configuration eingebunden werden.

Dim  Conn as String = ConfigurationSettings.AppSettings("DBConn")

 

Es werden noch  mimdestens zwei weitere Namespace benötigt. System.Data für ADO .NET und ein Managed Provider wie System.Data.SQLClient für den direkten Zugriff auf den SQL Server. Für das Connection Objekt muss erst eine Instanz erstellt werden. In diesem Zuge kann man gleich den Connection String mitgeben.

Dim MyConn As SqlConnection = New SqlConnection(DBConn)

 

Nun kommen wir an die Stelle, wo normalerweise das Recordset zum Einsatz kommen würde. Hier wird der Job des Recordsets in zwei Teile gespalten. Der erste Teile beschäftigt sich mit dem Welche Daten und Woher. Dies übernimmt der DataAdapter.

dim  MyDA as New SqlDataAdapter("select * from Authors", myConn)
 

An dieser Stelle passiert nichts weiter. Als nächstes brauchen wir noch für den zweiten Job des Recodsets einen DatenContainer. Dieser wird über das Dataset erstellt.

dim myDS as New Dataset()

 

Jetzt müssen die Daten nur mehr Ihren Weg in das Dataset finden. Dazu besitzt der DataAdapter einen Einschalter nämlich die Fill Methode. Da der Container viel Platz hat, kann er mehrere Abfrageergebnisse aufnehmen. Deshalb muss beim Füllen noch ein Name für die Datenmenge vergeben werden. Dieser muss nichts mit den Daten zu haben. 

myDA.Fill(myDS,"FakeName") 

Dieses Dataset lässt sich dann an ein Datagrid über die Datasource Eigenschaft binden.

MyDataGrid.DataSource=myDS.Tables("FakeName").DefaultView

Beachten Sie, das das Dataset praktisch eine In Memory Kopie der Daten darstellt. Innerhalb dieser Kopie kann auf die Daten zugegriffen, Sortiert, Relationen erstellt und gefiltert werden. Dies beinflusst aber die Originaldaten nicht. Dazu stehen Update Möglichkeiten zur Verfügung. Der lesende Zugriff auf diese Daten ist etwas gewöhnungsbedürftig. Hier muss  man sich die Daten wie ein Mehrdimensionales Array vorstellen. Genauso ist auch der Zugriff über Indexe möglich. In diesem Beispiel wird selbst die Tabelle über den Index selektiert (statt über FakeName). Für das Ändern des Feldes wird einfach ein Wert zugewiesen.

Feld=myDs.Tables(0).Rows(0)(0).Tostring

 

Natürlich ist auch der Zugriff über Namen möglich. Dazu wird erst ein Datensatz gesucht und dann ein bestimmtes Feld ausgelesen.

myDS.Tables("FakeName").Rows.Find("ALFKI")

myDS.Tables("FakeName").Rows(0)("ContactName")="Hannes"

Um einen reinen lesenden Zugriff durchzuführen gibt es noch den Datareader. Dieser entspricht beim Recordset dem Forwardonly/Readonly Modus. Dann ist allerdings auch nur eine Vorwärtsbewegung möglich. Ausserdem wird nur immer ein Datensatz im Speicher gehalten. Dazu braucht man ein Command Objekt, das Was Was und Wo klärt. Dann wird der Datareader ausgeführt. Anschliessend kann mit einer While Schleige Satz für Satz gelesen werden. Über den Index des Readers kann dann auf die Felder zugegriffen werden.

Dim myCmd As SqlCommand = New SqlCommand("select * from Authors", myConn)

myCmd.Open()

Dim dr As SqlDataReader = myCmd.ExecuteReader()

While dr.Read()

            console.write(dr("feld").ToString)

Loop

 

Dieser Artikel soll eine erste sanfte Einführung in ADO .NET bieten. tiefergründiges finden Sie an anderer Stelle. Basist ist Beta 2.

 


© Copyright 2008 ppedv AG