Hop til teksten

IT FJERNUNDERVISNING
- IT kurser når Du har tid!

Dataset og DataTable

De fleste programører vil nok hurtigt kunne blive enige om at DataSet klassen er den mest brugte del af ADO.NET. DataSet klassen giver mulighed for at håndtere data uden at have adgang til den bagvedliggende database. Denne mulighed har der været i ASP.NET siden version 1.0 og i 3.5 har DataSet de samme muligheder plus nogle nye.

Et objekt dannet af DataSet klassen virker som en beholder for andre objekter, der dannet ud fra DataTable klassen. DataTable objektet repræsenterer en logisk data tabel i hukommelsen. Det indeholder rækker, kolonner, primær nøgler, relationer med andre DataTable objekter. Man kan derfor have et DataSet objekt bygget op af to tabeller f.eks. projekter og aktiviteter som i vores eksempeldatabase og ville kunne bruge det objekt præcis som man ville kunne bruge en "rigtig" database.

De fleste eksempler på database baseret programmering - uden direkte forbindelse til databasen -  er faktisk baseret på en eller flere DataTable objekter inden i et DataSet objekt. Tidligere versioner af ADO.NET tillod ikke arbejde direkte med DataTable objektet f.eks. i forbindelse med læsning og skrivning af data til XML. Det betød at alle operationer skulle gennem DataSet objektet. I version 3.5 (og 2.0) af .NET framework'et er denne begrænsning fjernet og man kan arbejde direkte på DataTable objektet. Det anbefales derfor at anvende DataTable klassen frem for DataSet med mindre der er behov for håndtering af flere tabeller med relationer. Nedenfor et eksempel på etablering af en DataTable udfra en DataReader:

using System.Data.SqlClient;

protected void Page_Load(object sender, EventArgs e)
{
    DataTable minDataTabel;
    SqlDataReader minReader;

    SqlConnection minForbindelse = new SqlConnection();
    minForbindelse.ConnectionString = 
        ConfigurationManager.ConnectionStrings["ASPNET35KursusConnectionString"].ToString();
    SqlCommand minKommando = new SqlCommand();
    minKommando.CommandText = "Select * from tblProjekter";
    minKommando.CommandType = CommandType.Text;
    minKommando.Connection = minForbindelse;
    minKommando.Connection.Open();
    minReader = minKommando.ExecuteReader(CommandBehavior.CloseConnection);

    minDataTabel = new DataTable();
    minDataTabel.Load(minReader);
    gvData.DataSource = minDataTabel;
    gvData.DataBind();

    minDataTabel.Dispose();
    minKommando.Dispose();
    minForbindelse.Dispose();
}

Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim minDataTabel As DataTable
    Dim minReader As SqlDataReader


    Dim minForbindelse As SqlConnection = New SqlConnection()
    minForbindelse.ConnectionString = 
         ConfigurationManager.ConnectionStrings("ASPNET35KursusConnectionString").ToString()
    Dim minKommando As SqlCommand = New SqlCommand()
    minKommando.CommandText = "Select * from tblProjekter"
    minKommando.CommandType = CommandType.Text
    minKommando.Connection = minForbindelse

    minKommando.Connection.Open()
    minReader = minKommando.ExecuteReader(CommandBehavior.CloseConnection)

    minDataTabel = New DataTable()
    minDataTabel.Load(minReader)
    gvData.DataSource = minDataTabel
    gvData.DataBind()

    minDataTabel.Dispose()
    minKommando.Dispose()
    minForbindelse.Dispose()
End Sub

Ved godt at vi har set dette før, men håber det giver mening alligevel.

Når du har betalt for kurset får du adgang til øvelser til hver lektion. Og når du har fået godkendt din besvarelse får du desuden adgang til mine løsningsforslag med ekstra tips og trix.