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
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