Freigeben über


ASP.NET-Datenzugriff

Das .NET Framework enthält eine neue Datenzugriffstechnologie mit der Bezeichnung ADO.NET, die eine Verbesserung gegenüber ADO darstellt. Dennoch unterscheiden sich die Klassen, aus denen ADO.NET besteht, von den ADO-Objekten, mit denen Sie möglicherweise vertraut sind. An den ADO-Anwendungen müssen einige Änderungen vorgenommen werden, um sie in ADO.NET umzuwandeln. Die Änderungen müssen jedoch nicht sofort vorgenommen werden, damit diese unter ASP.NET ausgeführt werden können, da ADO unter ASP.NET funktioniert. Trotzdem lohnt es sich, ADO-Anwendungen in ADO.NET umzuwandeln. Für nicht verbundene Anwendungen bietet ADO.NET Leistungsvorteile gegenüber nicht verbundenen ADO-Recordsets. Während es sich bei den Übertragungs- und Empfangskomponenten in ADO um COM-Objekte handeln muss, überträgt ADO.NET Daten im standardmäßigen XML-Format, so dass kein COM-Marshalling und keine Datentypkonvertierungen erforderlich sind.

Es gibt für die von einer Datenbank abgerufenen Daten in der Regel zwei Verwendungsmöglichkeiten. Die Datensätze werden entweder überprüft und von ASP-Code vorbereitend in eine andere Aktion geändert, ohne dem Client direkt angezeigt zu werden, oder sie werden dem Client einfach in einer Tabelle oder in einem Raster angezeigt. Anhand der Beispiele in diesem Thema wird dargestellt, wie ein typisches ADO-Szenario in ADO.NET umgewandelt wird. Das ADO.NET-Modell hat viel mehr zu bieten, als in diesen kurzen Beispielen beschrieben wird. Dies ist lediglich eine kurze Übersicht dazu, wie allgemeine ASP- und ADO-Szenarien in .NET Framework portiert werden. Unter Übersicht über ADO.NET finden Sie eine detaillierte Einführung in ADO.NET.

Arbeiten mit einer einzigen Tabelle

Der erste Codeblock im folgenden Beispiel ist ein typisches Beispiel für Code in ASP-Anwendungen, die ADO zum Lesen und Ändern von Datensätzen verwenden, die von einer einzigen SQL-Abfrage zurückgegeben wurden. Die Datensätze, die von der im Lieferumfang von Microsoft Access enthaltenen Beispieldatenbank Northwind zurückgegeben werden, werden mit Hilfe des ADO-Objekts Recordset gelesen. Dieser Code ist in einer Datei mit der Dateinamenerweiterung .asp enthalten.

<%@LANGUAGE=VBSCRIPT%>
<! 
This ASP example uses ADO to read records from a database and print two
fields from all returned records to an ASP page. Connection to the Northwind database is through an ODBC system data source (DSN. 
>
<html>
<body>
<%
   dim ADOconn, ADOrs, sqlstr
   sqlstr="SELECT * FROM Employees;"
   set ADOconn = Server.CreateObject("ADODB.Connection")
   ADOconn.Open "DSN = Test"
   set ADOrs = ADOconn.execute(sqlstr) 
   if ADOrs.BOF and ADOrs.EOF then ' Query didn't return any records.
      Response.Write("No Records.")
   else
      ADOrs.MoveFirst
      Do While Not ADOrs.EOF
         Response.Write(Server.HtmlEncode(ADOrs("FirstName")) & " " _
            & Server.HtmlEncode(ADOrs("LastName")) & "<br>")
         ADOrs.MoveNext
      Loop
      Response.Write("<p>End of data.")   
   end if
   ADOrs.close
   set ADOrs = nothing
%>
</body>
</html>

Im folgenden Beispiel sind die als Mindestanforderung notwendigen Änderungen dargestellt, die erforderlich sind, um das vorherige Beispiel in eine ASP.NET-Anwendung umzuwandeln. Die meisten Änderungen sind erforderlich, damit nicht gegen die Regeln der neuen Visual Basic-Syntax verstoßen wird. Diese Datei kann in eine Datei mit der Dateinamenerweiterung .aspx umbenannt werden und wird mit ASP.NET ausgeführt. Überarbeitete Zeilen sind fett dargestellt. In der ersten Zeile wurde die <%@ Page >-Direktive mit dem aspcompat=true-Attribut hinzugefügt.

<%@Page aspcompat=true Language = VB%>
<! 
This example uses ADO to read records from a database and print two
fields from all records in the database to an ASP.NET page. 
The database is located on the server and connection is through an ODBC system data source (DSN.
>
<html>
<body>
<%
   dim objConn, rs, sqlstr
   sqlstr="SELECT * FROM Employees;"
   objConn = Server.CreateObject("ADODB.Connection") ' Set removed.objConn.Open("DSN=TEST") ' Parentheses added.rs = objConn.execute(sqlstr) ' Set statement removed.
   Response.Write("<p>ADO Test</p>")

   if rs.BOF and rs.EOF then ' Query didn't return any records.
      Response.Write("No Records")
   else
      rs.MoveFirst
      Do While Not rs.EOF
         ' Specify Value property.
         Response.Write(Server.HtmlEncode(rs("FirstName").Value) _
            & " " & Server.HtmlEncode(rs("LastName").Value) & "<br>")
         rs.MoveNext
      Loop
      Response.Write("<p>End of data")
   end if
   rs.close
   rs = nothing ' Set statement removed.
%>

Bei dem nächsten Beispiel handelt es sich um eine ASP.NET-Anwendung, die ADO.NET zum Lesen von Datensätzen aus der im vorherigen Beispiel genannten Datenbank Northwind verwendet. Dieser Code erzeugt eine Ausgabe, die der des vorherigen Beispiels entspricht, und wurde so geändert, dass er die ASP.NET-Codeblockkonventionen erfüllt.

Das Beispiel erstellt ein ADO.NET-DataSet-Objekt, das in diesem Fall eine Datentabelle enthält, die ähnlich verwendet wird wie ein ADO-Recordset. Ein Dataset kann aus Auflistungen aus einer oder mehreren DataTables, DataRelations und Constraints bestehen, die eine speicherresidente Datenbank bilden. Daher ist ein ADO.NET-Dataset wesentlich flexibler als ein ADO-Recordset.

Um ADO.NET verwenden zu können, müssen Sie den System.Data-Namespace und den System.Data.OleDb-Namespace importieren. Wenn es sich bei der Datenquelle um eine SQL Server-Datenbank handelt, müssen Sie den System.Data.SqlClient-Namespace anstelle des System.Data.OleDb-Namespace importieren. Ausführliche Informationen zum Verwenden von Verbindungsobjekten für ADO- und SQL .NET-Datenprovider finden Sie unter Verwalten von Verbindungen.

<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.OleDb"%>
<! 
This example uses ADO.NET to read records from a database and print two
fields from all returned records to an ASP.NET page. The database
is located on the local server.
>
<html>
<Script Language=VB Runat=Server>
   Sub Page_Load(Sender As Object, e As EventArgs)
      Dim MyConnection As OleDbConnection
      Dim MyCommand As OleDbDataAdapter
      dim MyDataset As DataSet
      dim MyTable As DataTable
      dim loop1, numrows As Integer
      dim sqlstr As String
      
      sqlstr = "SELECT * FROM Employees;"
      
      ' Create a connection to the data source. 
      MyConnection = New OleDbConnection("Provider=SQLOLEDB;" _
         & "server=localhost;"Integrated Security=SSPI;" _ 
         & "Initial Catalog=Northwind")

      ' Create a Command object with the SQL statement.
      MyCommand = New OleDbDataAdapter(sqlstr, MyConnection)

      ' Fill a DataSet with data returned from the database.
      MyDataset = New DataSet
      MyCommand.Fill(MyDataset)
      
      ' Create a new DataTable object and assign to it
      ' the new table in the Tables collection.
      MyTable = New DataTable
      MyTable = MyDataset.Tables(0)
      ' Find how many rows are in the Rows collection 
      ' of the new DataTable object.
      numrows = MyTable.Rows.Count
       If numrows = 0 then
         Response.Write("<p>No records.</p>")
      Else
         Response.Write("<p>" & Cstr(numrows) & " records found.</p>")
         For loop1 = 0 To numrows - 1
            ' Print the values of the two columns in the Columns
            ' collection for each row.
            Response.Write(Server.HtmlEncode(MyTable.Rows(loop1).Item("FirstName")) _
               & " " & Server.HtmlEncode(MyTable.Rows(loop1).Item("LastName")) & "<br>")
         Next loop1
      End If
      Response.Write("<p>End of data.</p>")   
   End Sub
</Script>
</html>

Wenn eine Datenbankabfrage (auch, wenn es sich um eine kombinierte Abfrage in mehreren Tabellen handelt) einen einzigen Datensatz zurückgibt, können Sie eine einzige DataTable (in diesem Beispiel MyTable) ähnlich wie ein ADO-Recordset verwenden.

Arbeiten mit mehreren Datenbanktabellen

Das ADO.NET-Dataset kann mehrere Tabellen sowie einen Satz von Beziehungen enthalten, der eine lokale Kopie einer relationalen Datenbank beschreibt. Das Dataset können Sie sich wie eine Minidatenbank im Serverspeicher vorstellen. Mit Hilfe der Beziehungsobjekte kann der Code durch die Auflistung der Tabellen navigieren, um in komplexer Art und Weise auf Datensätze zuzugreifen, ohne weitere Abfragen an den Hauptdatenspeicher auszuführen. Weitere Informationen zu den Komponenten eines Datasets finden Sie unter Das ADO.NET-DataSet.

Anzeigen von Daten in einem Steuerelement

Damit Datenbankdaten in einem Browser tabellarisch dargestellt werden können, mussten ASP-Entwickler Code schreiben, der die Daten mit HTML-Tags kombiniert, um HTML-Tabellen dynamisch zu erstellen. ASP.NET enthält das DataGrid-Serversteuerelement, das DataList-Serversteuerelement und das Repeater-Serversteuerelement, die das Anzeigen von Daten in tabellarischer Form auf einer Webseite erheblich vereinfachen. ADO.NET-Datasets können auf einfache Weise an diese Steuerelemente gebunden werden. Das ASP.NET-Modul, das mit einem Steuerelement arbeitet, sendet reinen HTML 3.2-Code an den Browser, wodurch für den Benutzer ein umfangreich formatiertes Layout erzeugt wird.

Unter Binden von SQL-Daten an ein DataGrid-Steuerelement, Binden von SQL-Daten an ein DataList-Steuerelement und Binden von SQL-Daten an ein Repeater-Steuerelement finden Sie spezifische Beispiele, die diese Steuerelemente zum Anzeigen von Datenbankdaten verwenden.

Siehe auch

Zugreifen auf Daten mit ADO.NET | Migrieren von ASP-Seiten zu ASP.NET