Begin

ASP.net OleDbCommandbuilder

ASP.NET : ADO.net objecten OleDbCommandBuilder, Dataset.

Voor het opvragen van gegevens met het object 'Dataset' in een GridView, zie 'ASP.NET : D ADO.net objecten OleDbDataAdapter ,Dataset'.
Hier een voorbeeld om via een Dataset gegevens weer te geven in Testvakken, DropDownList's enz. Uit de tblWerk willen wij de detailgegevens weergeven van één werk.

De .aspx pagina :

<table>
        <tr><td>ID van het werk </td><td>
                <asp:TextBox ID="txtIDWerk" runat="server"></asp:TextBox>
                -<asp:Button ID="btnBlankWerk" runat="server" Text="Velden blanken" />
                </td></tr>
            <tr><td>Titel werk</td><td>
                <asp:TextBox ID="txtWTitel" runat="server" Width="250px"></asp:TextBox></td></tr>
            <tr><td>Gelezen ? </td><td>
                <asp:CheckBox ID="chbWGelezen" runat="server" /></td></tr>
            <tr><td>Appreciatie</td><td>
                <asp:DropDownList ID="ddlWAppr" runat="server" Width="175px">
                </asp:DropDownList>
            </td></tr>
            <tr><td>Genre Werk</td><td>
                <asp:DropDownList ID="ddlWGenre" runat="server" Width="175px">
                </asp:DropDownList>
            </td></tr>
            <tr><td>Uitgever </td><td>
                <asp:DropDownList ID="ddlWUitgever" runat="server" Width="250px">
                </asp:DropDownList>
            </td></tr>
        </table>
        

De .aspx.vb pagina :

'De routine detailWerk() kan bijvoorbeeld aangeroepen worden via het Click-event van een Button
        
Protected Sub detailWerk(ByVal intIDWerk As Integer)
                If con.State = ConnectionState.Closed Then
                    con.Open()
                End If
                Dim comDetailWerk As New OleDbCommand("SELECT * FROM tblWerk WHERE IDWerk = " & intIDWerk, con)
                Dim adapDetailWerk As New OleDbDataAdapter(comDetailWerk)
                Dim dsDetailWerk As New DataSet()
                adapDetailWerk.Fill(dsDetailWerk, "dtWerk")
                Dim rij As DataRow = dsDetailWerk.Tables("dtWerk").Rows(0)
                    Me.txtIDWerk.Text = intIDWerk.ToString
                    Me.txtWTitel.Text = rij("WTitel")
                    Me.chbWGelezen.Checked = CBool(rij("WGelezen"))
                    Me.ddlWAppr.SelectedValue = CInt(rij("WAppr"))
                    Me.ddlWGenre.SelectedValue = CInt(rij("WGenre"))
                    Me.ddlWUitgever.SelectedValue = CInt(rij("WUitgever"))
                con.Close()
        End Sub
        

Daarnaast kan men met het Dataset object ook gegevens

  • toevoegen
  • wijzigen
  • verwijderen

Hiervoor heeft men het object OleDBCommandBuilder nodig. Het principe is dat de operaties steeds worden uitgevoerdop de Dataset, op de zogenaamde 'disconnected' data en dat er nadien via de Update-methode van het OleDbDataAdapter object moet teruggekoppeld worden naar de database.
Syntaxis:

	Dim com As New OleDbCommand("SELECT * FROM tblWerk ;", con)
            Dim adap As New OleDbDataAdapter(com)
            Dim cb As New OleDbCommandBuilder(adap)
            Dim ds As New DataSet()
            adap.Fill(ds)
            
' ....operaties
	adap.Update(ds)
        

Bij de drie volgende voorbeelden wordt gebruik gemaakt van hoger vermelde .aspx-pagina.

Gegevens toevoegen via OleDBCommandBuilder en Dataset objecten.

Men neemt een nieuwe 'DataRow' via de de methode 'NewRow' van de 'Tables' eigenschap van het DataSet object.Tenslotte voegt men de rij toe aan de Dataset en koppelt men terug naar de database. De Code :

Protected Sub nieuwWerk(ByVal intIDAuteur As Integer)
                If con.State = ConnectionState.Closed Then
                    con.Open()
                End If
                Dim comnieuwWerk As New OleDbCommand("SELECT * FROM tblWerk ;", con)
                Dim adapnieuwWerk As New OleDbDataAdapter(comnieuwWerk)
                Dim cbnieuwWerk As New OleDbCommandBuilder(adapnieuwWerk)
                Dim dsnieuwWerk As New DataSet()
                    adapnieuwWerk.Fill(dsnieuwWerk)
                    Dim rij As DataRow = dsnieuwWerk.Tables(0).NewRow
                        rij("IDAuteur") = intIDAuteur
                        rij("WTitel") = Me.txtWTitel.Text
                        rij("WGelezen") = CBool(Me.chbWGelezen.Checked)
                        rij("WAppr") = CInt(Me.ddlWAppr.SelectedValue)
                        rij("WGenre") = CInt(Me.ddlWGenre.SelectedValue)
                           rij("WUitgever") = CInt(Me.ddlWUitgever.SelectedValue)
                    dsnieuwWerk.Tables(0).Rows.Add(rij)
                    adapnieuwWerk.Update(dsnieuwWerk)
                con.Close()
            End Sub
        

Gegevens bewerken via OleDBCommandBuilder en Dataset objecten.

Vooraf roept men de methode AcceptChanges() van de Dataset aan, men start het bewerken met de methode BeginEdit() van het DataRow object en de methode EndEdit() wanneer het bewerken is beëindigd. Ten slotte koppelt men terug naar de database. De Code:

Protected Sub bijwerkenWerk(ByVal intIDWerk As Integer)
                If con.State = ConnectionState.Closed Then
                    con.Open()
                End If
                Dim combijwerkWerk As New OleDbCommand("SELECT * FROM tblWerk WHERE IDWerk = " & intIDWerk, con)
                Dim adapbijwerkWerk As New OleDbDataAdapter(combijwerkWerk)
                Dim cbbijwerkWerk As New OleDbCommandBuilder(adapbijwerkWerk)
                Dim dsbijwerkWerk As New DataSet()
                    adapbijwerkWerk.Fill(dsbijwerkWerk, "dtbijwerkWerk")
                    dsbijwerkWerk.AcceptChanges()
                    Dim rij As DataRow = dsbijwerkWerk.Tables("dtbijwerkWerk").Rows(0)
                    rij.BeginEdit()
                        rij("WTitel") = Me.txtWTitel.Text
                        rij("WGelezen") = CBool(Me.chbWGelezen.Checked)
                        rij("WAppr") = CInt(Me.ddlWAppr.SelectedValue)
                        rij("WGenre") = CInt(Me.ddlWGenre.SelectedValue)
                        rij("WUitgever") = CInt(Me.ddlWUitgever.SelectedValue)
                        rij.EndEdit()
                    adapbijwerkWerk.Update(dsbijwerkWerk.Tables("dtbijwerkWerk"))
                con.Close()
            End Sub
        

Gegevens verwijderen via OleDBCommandBuilder en Dataset objecten.

Hier een voorbeeld waarbij één rij wordt verwijderd, en dit via Delete methode van het DataRow- object. Ten slotte koppelt men terug naar de database. De Code:

Protected Sub verwijderWerk(ByVal intIDWerk As Integer)
                If con.State = ConnectionState.Closed Then
                    con.Open()
                End If
                Dim comverwijderWerk As New OleDbCommand("SELECT * FROM tblWerk WHERE IDWerk = " & intIDWerk & ";", con)
                Dim adapverwijderWerk As New OleDbDataAdapter(comverwijderWerk)
                Dim cbverwijderWerk As New OleDbCommandBuilder(adapverwijderWerk)
                Dim dsverwijderWerk As New DataSet()
                    adapverwijderWerk.Fill(dsverwijderWerk)
                        Dim rij As DataRow = dsverwijderWerk.Tables(0).Rows(0)
                        rij.Delete()
                    adapverwijderWerk.Update(dsverwijderWerk)
                con.Close()
            End Sub
        
Begin