Begin

ASP.net OleDbCommand

ASP.NET : ADO.net object OleDbCommand, Methoden.

De methode ExecuteReader en die een OleDbDataReader object geeft werd besproken onder: 'ASP.NET : C ADO.net objecten OleDbConnection ,OleDbCommand, OleDbDataReader.'. Wanneer men enkel data moet opvragen is deze methode zeer snel en aangewezen. Echter 'paging' (gegevens over verschilldende bladzijden weergeven) sorteren en bewerken zijn met een OleDDDataReader niet mogelijk.

Nog 2 belangrijke methodes van het OleDbCommand object zijn de ExecuteScalar en de ExecuteNonQuery methodes.

  1. ExecuteScalar. Voert een SQL-clause uit, maar geeft enkel één waarde weer namelijk deze van het eerste veld van de eerste rij. Is bijvoorbeeld interessant bij het uitvoeren van een aggregatie query die het aantal records weergeeft. Bij voorbeeld
    Dim strSQLTelwerk As String = "SELECT Count(IDWerk) AS Totaal FROM tblWerk WHERE IDAuteur = " & intIDAuteur & ";"
    Dim comTelWerk As New OleDbCommand(strSQLTelwerk, con)
    Dim intAantal werken as integer = comTelWerk.ExecuteScalar
    
  2. ExecuteNonQuery. Voert een SQL-clause uit die geen rijen weergeeft en geeft als resultaat een integer die het aantal betrokken rijen weergeeft. In Access jargon: het voert een 'Actie Query' uit en geeft het aantal aangepaste rijen weer. Dus :
    • INSERT - clause
      Dim strSQLtoevWerk As String = "INSERT INTO tblWerk (IDAuteur,WTitel,WGelezen,WAppr,WGenre,WUitgever) VALUES " _
       & "(" & intIDAuteur & ",'" & strWTitel & "'," & blnWGelezen & "," & intWAppr & "," & intWGenre & "," & intWUitgever & ");"
      Dim comtoevwerk As New OleDbCommand(strSQLtoevWerk, con)
      comtoevwerk.ExecuteNonQuery()
      
    • UPDATE - clause
      Dim strSQLbewerkWerk As String = "UPDATE tblWerk SET WTitel = '" & strWTitel & "', WGelezen = " & blnWGelezen & "," _
      & "WAppr = " & intWAppr & ", WGenre = " & intWGenre & ", WUitgever = " & intWUitgever & " WHERE IDWerk = " & intIDWerk & ";"
      Dim combewerkWerk As New OleDbCommand(strSQLbewerkWerk, con)
      combewerkWerk.ExecuteNonQuery()
      
    • DELETE - Clause
      Dim strSQLverwijdWerk As String = "DELETE * FROM tblWerk WHERE IDWerk = " & intIDWerk
      Dim comverwijdWerk As New OleDbCommand(strSQLverwijdWerk, con)
      comverwijdWerk.ExecuteNonQuery()
      

Vanaf de pagina Auteur_4.aspx wordt via een hyperlink een auteur geselecteerd en genavigeert naar pagina Auteur_5.apsx. Zie ASP.NET : C ADO.net objecten OleDbConnection ,OleDbCommand, OleDbDataReader. De pagina Auteur_5.aspx :

  1. Geeft de details van de auteur weer aan de hand van een OleDbDataReader, gezien de gegevens niet moeten bewerkt worden.
  2. Geeft via een Listbox een overzicht van de werken van de auteur, eveneens via een OleDbDataReader.
  3. Een label geeft het aantal werken van de auteur, via de methode ExecuteScalar van het OleDbCommand object.
  4. Men kan een nieuw werk toevoegen via de knop 'Werk toevoegen'
    Men vult de velden in met de gegevens van het nieuwe werk en drukt op uitvoeren. Er wordt gebruik gemaakt van de ExecuteNonQuery methode van het OleDbCommand object.
  5. Men dienst een werk te selecteren om via de knop 'Werk opvragen' een werk te verwijderen of te bewerken. Voor beide opties wordt ook hier gebruik gemaakt van de ExecuteNonQuery methode van het OleDbCommand object.

De .aspx pagina met de detail gegevens van de auteur met zijn werken.

<asp:HiddenField ID="hdfIDAteur" runat="server" />
    <table>
    <tr><td>ID van de Auteur</td><td><asp:TextBox ID="txtIDAuteur" runat="server"></asp:TextBox></td></tr>
    <tr><td>Naam auteur</td><td><asp:TextBox ID="txtANaam" runat="server" Width="250px"></asp:TextBox></td></tr>
    <tr><td>Voornaam auteur</td><td><asp:TextBox ID="txtAVoornaam" runat="server" Width="250px"></asp:TextBox></td></tr>
    <tr><td>Info over auteur</td><td><asp:TextBox ID="txtAInfo" runat="server" Width="250px"
            TextMode="MultiLine"></asp:TextBox></td></tr>
     <tr><td>Nationaliteit auteur</td><td><asp:DropDownList ID="ddlANat" runat="server" Width="175px">
         </asp:DropDownList></td></tr>

    <tr><td>Geslacht auteur</td><td><asp:DropDownList ID="ddlAGeslacht" runat="server" Width="175px">
            <asp:ListItem Value="V" Text="Vrouwelijk"></asp:ListItem>
            <asp:ListItem Value="M" Text="Mannelijk"></asp:ListItem>
        </asp:DropDownList>

    </td></tr>
    <tr><td>
    <asp:ListBox ID="lboWerkTitel" runat="server" Height="120px"></asp:ListBox>
    <br />
        <asp:Label ID="lblAantWerk" runat="server" Text=""></asp:Label>
    </td>
    <td>
    <table style="margin-left:35px;" cellpadding="15px" cellspacing="15px">
    <tr>
    <td>
        <asp:Button ID="btnWerkToev" runat="server" Text="Werk toevoegen" /></td>

    </tr>
    <tr>
    <td>
        <asp:Button ID="btnWerkOpvr" runat="server" Text="Werk Opvragen" /></td>

    </tr>
    </table>

    </td></tr>
    </table>
    <table ID="tblWerk" runat="server">

    <tr><td>ID van het werk </td><td>
        <asp:TextBox ID="txtIDWerk" runat="server"></asp:TextBox></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="175px">
        </asp:DropDownList>
    </td></tr>
    <tr><td colspan="2">
    <asp:RadioButtonList ID="rblWerk" runat="server" RepeatDirection="Horizontal" AutoPostBack="true">
            <asp:ListItem Value="1">Werk bewerken</asp:ListItem>
            <asp:ListItem Value="2">Werk verwijderen</asp:ListItem>
        </asp:RadioButtonList>

    </td></tr>
    <tr><td>
        <asp:Button ID="btnUitvoeren" runat="server" Text="Uitvoeren" /></td>
        <td><asp:Label ID="lblResultaat" runat="server" Text="Resultaat"></asp:Label>
    </td></tr>

    </table>

De .aspx.vb pagina met de detail gegevens van de auteur met zijn werken.

Partial Class Boek_Auteur_5
    Inherits System.Web.UI.Page
    Public strCon As String = ConfigurationManager.ConnectionStrings("boeken").ToString
    Public con As New System.Data.OleDb.OleDbConnection(strCon)

    Protected Sub initTabelWerk(Optional ByVal intIDWerk As Integer = 0)
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
        Dim comAppr As New OleDbCommand("SELECT * FROM tblLuAppr ORDER BY Appreciatie;", con)
        Dim comGenre As New OleDbCommand("SELECT * FROM tblLuGenre ORDER BY Genre;", con)
        Dim comUitgever As New OleDbCommand("SELECT * FROM tblLuUitgever ORDER BY Uitgever;", con)
        Me.ddlWAppr.DataSource = comAppr.ExecuteReader
        Me.ddlWAppr.DataValueField = "IDWAppr"
        Me.ddlWAppr.DataTextField = "Appreciatie"
        Me.ddlWAppr.DataBind()
        Me.ddlWGenre.DataSource = comGenre.ExecuteReader
        Me.ddlWGenre.DataValueField = "IDWGenre"
        Me.ddlWGenre.DataTextField = "Genre"
        Me.ddlWGenre.DataBind()
        Me.ddlWUitgever.DataSource = comUitgever.ExecuteReader
        Me.ddlWUitgever.DataValueField = "IDWUitgever"
        Me.ddlWUitgever.DataTextField = "Uitgever"
        Me.ddlWUitgever.DataBind()

        If intIDWerk <> 0 Then
            Dim strSQLWerk As String = "SELECT * FROM tblWerk WHERE IDWerk = " & intIDWerk

            Dim comWerk As New OleDbCommand(strSQLWerk, con)

            Dim readWerk As OleDbDataReader = comWerk.ExecuteReader
            readWerk.Read()
            Me.txtIDWerk.Text = readWerk("IDWerk")
            Me.txtWTitel.Text = readWerk("WTitel")
            Me.chbWGelezen.Checked = CBool(readWerk("WGelezen"))
            Me.ddlWAppr.SelectedValue = CInt(readWerk("WAppr"))
            Me.ddlWGenre.SelectedValue = CInt(readWerk("WGenre"))
            Me.ddlWUitgever.SelectedValue = CInt(readWerk("WUitgever"))
        End If
        con.Close()
    End Sub
    Protected Function telWerken(ByVal intIDAuteur As Integer) As String
        Dim strSQLTelwerk As String = "SELECT Count(IDWerk) AS Totaal FROM tblWerk WHERE IDAuteur = " & intIDAuteur & ";"
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
        Dim comTelWerk As New OleDbCommand(strSQLTelwerk, con)
        Return "Werken: " & comTelWerk.ExecuteScalar.ToString
        con.Close()
    End Function
    Protected Function toevWerk(ByVal intIDAuteur As Integer) As String
        Dim strWTitel As String = Me.txtWTitel.Text
        Dim blnWGelezen As Boolean = CBool(Me.chbWGelezen.Checked)
        Dim intWAppr As Integer = CInt(Me.ddlWAppr.SelectedValue)
        Dim intWGenre As Integer = CInt(Me.ddlWGenre.SelectedValue)
        Dim intWUitgever As Integer = CInt(Me.ddlWUitgever.SelectedValue)
        Dim strSQLtoevWerk As String = "INSERT INTO tblWerk (IDAuteur,WTitel,WGelezen,WAppr,WGenre,WUitgever) VALUES " _
        & "(" & intIDAuteur & ",'" & strWTitel & "'," & blnWGelezen & "," & intWAppr & "," & intWGenre & "," & intWUitgever & ");"
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
        Dim comtoevwerk As New OleDbCommand(strSQLtoevWerk, con)
        comtoevwerk.ExecuteNonQuery()
        con.Close()
        Return "Werk toegevoegd."
    End Function

    Protected Function bewerkWerk(ByVal intIDWerk As Integer) As String
        Dim strWTitel As String = Me.txtWTitel.Text
        Dim blnWGelezen As Boolean = CBool(Me.chbWGelezen.Checked)
        Dim intWAppr As Integer = CInt(Me.ddlWAppr.SelectedValue)
        Dim intWGenre As Integer = CInt(Me.ddlWGenre.SelectedValue)
        Dim intWUitgever As Integer = CInt(Me.ddlWUitgever.SelectedValue)
        Dim strSQLbewerkWerk As String = "UPDATE tblWerk SET WTitel = '" & strWTitel & "', WGelezen = " & blnWGelezen & "," _
        & "WAppr = " & intWAppr & ", WGenre = " & intWGenre & ", WUitgever = " & intWUitgever & " WHERE IDWerk = " & intIDWerk & ";"
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
        Dim combewerkWerk As New OleDbCommand(strSQLbewerkWerk, con)
        combewerkWerk.ExecuteNonQuery()
        con.Close()
        Return "Werk bijgewerkt."
    End Function
    Protected Function verwijdWerk(ByVal intIDWerk As Integer) As String
        Dim strSQLverwijdWerk As String = "DELETE * FROM tblWerk WHERE IDWerk = " & intIDWerk
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
        Dim comverwijdWerk As New OleDbCommand(strSQLverwijdWerk, con)
        comverwijdWerk.ExecuteNonQuery()
        con.Close()

        Return "Werk verwijderd."
    End Function

    Protected Sub initLijstWerken(ByVal intIDAuteur As Integer)
        Dim strSQLWerk As String = "SELECT IDWerk,WTitel FROM tblWerk WHERE IDAuteur = " & intIDAuteur & " ORDER BY WTitel;"
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
        Dim comWerk As New OleDbCommand(strSQLWerk, con)
        Dim readWerk As OleDbDataReader = comWerk.ExecuteReader
        Me.lboWerkTitel.DataSource = readWerk
        Me.lboWerkTitel.DataValueField = "IDWerk"
        Me.lboWerkTitel.DataTextField = "WTitel"
        Me.lboWerkTitel.DataBind()
        con.Close()
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Me.IsPostBack Then
            Dim intIDAuteur As Integer = CInt(Request.QueryString("IDAuteur"))
            Me.hdfIDAteur.Value = intIDAuteur
            Dim strSQLAuteur As String = "SELECT * FROM tblAuteur WHERE IDAuteur = " & intIDAuteur

            Me.tblWerk.Visible = False
            Try
                If con.State = ConnectionState.Closed Then
                    con.Open()
                End If
                Dim comNation As New OleDbCommand("Select * FROM tblLuNat;", con)
                Dim readNation As OleDbDataReader = comNation.ExecuteReader
                Me.ddlANat.DataSource = readNation
                Me.ddlANat.DataValueField = "IDANat"
                Me.ddlANat.DataTextField = "Nationaliteit"
                Me.ddlANat.DataBind()
                Dim comAuteur As New OleDbCommand(strSQLAuteur, con)
                Dim readAuteur As OleDbDataReader = comAuteur.ExecuteReader
                readAuteur.Read()
                Me.txtIDAuteur.Text = intIDAuteur.ToString
                Me.txtANaam.Text = readAuteur("ANaam")
                Me.txtAVoornaam.Text = readAuteur("AVoornaam")
                Me.txtAInfo.Text = readAuteur("AInfo") & ""
                Me.ddlANat.SelectedValue = CInt(readAuteur("ANat"))
                Me.ddlAGeslacht.SelectedValue = readAuteur("AGeslacht")
                con.Close()
                Call initLijstWerken(intIDAuteur)
                Me.lblAantWerk.Text = telWerken(intIDAuteur)
            Catch ex As OleDb.OleDbException
                Dim strBoodschap As String = ex.Message '& ex.InnerException.ToString
            End Try
        End If

    End Sub

    Protected Sub btnWerkOpvr_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnWerkOpvr.Click
        'If CInt(Me.lboWerkTitel.SelectedValue) > 0 Then
        If Not Me.lboWerkTitel.SelectedValue = Nothing Then

            Me.tblWerk.Visible = True
            Me.rblWerk.Visible = True
            Dim intIDWerk As Integer = CInt(Me.lboWerkTitel.SelectedValue)
            Call initTabelWerk(intIDWerk)
            Me.lblResultaat.Text = ""
        End If
    End Sub

    Protected Sub btnWerkToev_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnWerkToev.Click
        Me.tblWerk.Visible = True
        Me.rblWerk.Visible = False
        Me.lblResultaat.Text = ""
        Call initTabelWerk()
    End Sub

    Protected Sub btnUitvoeren_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUitvoeren.Click
        Dim intIDAuteur As Integer = Me.hdfIDAteur.Value
        If Me.rblWerk.Visible = False Then
            Me.lblResultaat.Text = toevWerk(intIDAuteur)
            Call initLijstWerken(intIDAuteur)
            Me.lblAantWerk.Text = telWerken(intIDAuteur)

        Else
            Dim intIDWerk As Integer = CInt(Me.txtIDWerk.Text)
            If CByte(Me.rblWerk.SelectedValue) = 1 Then
                Me.lblResultaat.Text = bewerkWerk(intIDWerk)
                Call initLijstWerken(intIDAuteur)
                Me.lblAantWerk.Text = telWerken(intIDAuteur)
            End If

            If CByte(Me.rblWerk.SelectedValue) = 2 Then
                Me.lblResultaat.Text = verwijdWerk(intIDWerk)
                Call initLijstWerken(intIDAuteur)
                Me.lblAantWerk.Text = telWerken(intIDAuteur)
            End If

        End If
        Me.lblAantWerk.Text = telWerken(intIDAuteur)

    End Sub

    Protected Sub rblWerk_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rblWerk.SelectedIndexChanged
        Me.lblResultaat.Text = ""
    End Sub
End Class
Begin