Imports System.Data.OleDb
Imports Mediatheek.data

Public Class clsLiedDA
    '-- Enumerations --
    '-- Fields --
    '-- Constructors --
    Private Sub New()
    End Sub
    '-- Methoden --

#Region "Get Liedjes"


    Public Shared Function GetLiedjes() As ArrayList
        'Hier maken we een functie getliedjes om alle liedjes op te roepen en te steken in een arraylist 

        'Hier worden alle records ingelezen van de tabel tblLied ( liedid, liednaam en liedduur )
        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblLied"

            '3. De gegevens selecteren en naar een DataTable overbrengen
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            '4. De gegegevens van de DataTable naar 
            '   een ArrayList van Lied-objecten overbrengen
            Dim arlLiedjes As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sLiedID, sLiedNaam, sLiedDuur As String

                sLiedID = Convert.ToString(oRow.Item("LiedID"))
                sLiedNaam = Convert.ToString(oRow.Item("LiedNaam"))
                sLiedDuur = Convert.ToString(oRow.Item("LiedDuur"))

                Dim oLied As New clsLied(sLiedID, sLiedNaam, sLiedDuur)
                arlLiedjes.Add(oLied)
            Next

            '5. De ArrayList returnen
            Return arlLiedjes

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    'public want word in albumbeheer subforms : frmAlbumToevoegen en frmAlbumWijzigen gebruikt
    Public Shared Function getVolgendLiedId() As Integer
        Try
            Dim sSQL As String = "SELECT MAX(LiedID) FROM tblLied"
            Dim iMaxId As Integer
            Try
                iMaxId = Convert.ToInt32(clsDatabase.ExecuteScalar(sSQL))
            Catch
                iMaxId = 0

            End Try
            Return iMaxId + 1
        Finally
        End Try
    End Function
    Public Shared Function GetLiedByID(ByVal sLiedID As String) As clsLied
        Dim sSQL As String = "SELECT * FROM tblLied WHERE LiedID=" + sLiedID + ""

        '3. De gegevens selecteren en naar een DataTable overbrengen
        Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

        '4. De gegegevens van de DataTable naar 

        Dim sLiedNaam, sLiedDuur As String



        Dim oRow As DataRow

        '!nutteloze for each, zal telkens maar 1 Liedobject returnen
        For Each oRow In oDataTable.Rows

            sLiedID = Convert.ToString(oRow.Item("LiedID"))
            sLiedNaam = Convert.ToString(oRow.Item("LiedNaam"))
            sLiedDuur = Convert.ToString(oRow.Item("LiedDuur"))

        Next

        Dim oGevondenLied As New clsLied(sLiedID, sLiedNaam, sLiedDuur)

        '5. Gevonden object returnen
        Return oGevondenLied

    End Function

#End Region

#Region "Voeg liedjes toe"
    Public Shared Sub VoegLiedToe(ByVal oLied As clsLied)
        'hier worden liedjes toegevoegd
        Dim sValue As String
        sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
        Dim oCon As System.Data.OleDb.OleDbConnection
        oCon = New OleDbConnection(sValue)
        oCon.Open()

        Dim oCommand As OleDbCommand
        oCommand = oCon.CreateCommand()

        oLied.LiedID = getVolgendLiedId()
        Dim sInsert As String
        sInsert = "INSERT INTO tblLied(LiedID,LiedNaam,LiedDuur)VALUES(?,?,?)"

        Dim oPar1 As New OleDbParameter("@LiedID", oLied.LiedID)
        Dim oPar2 As New OleDbParameter("@LiedNaam", oLied.LiedNaam)
        Dim oPar3 As New OleDbParameter("@LiedDuur", oLied.LiedDuur)


        oCommand.CommandText = sInsert
        oCommand.Parameters.Add(oPar1)
        oCommand.Parameters.Add(oPar2)
        oCommand.Parameters.Add(oPar3)

        oCommand.ExecuteNonQuery()
        oCon.Close()
    End Sub


#End Region

#Region "Wijzig lied"
    Public Shared Function WijzigLied(ByVal oLied As clsLied)
        'hier kan men liedjes wijzigen
        Dim oCon As OleDbConnection
        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon2 As System.Data.OleDb.OleDbConnection
            oCon2 = New OleDbConnection(sValue)
            oCon2.Open()

            Dim oCommand2 As OleDbCommand
            oCommand2 = oCon2.CreateCommand()
            Dim sInsert As String

            sInsert = "UPDATE tblLied SET LiedNaam=?, LiedDuur=? WHERE LiedID=?"


            Dim oPar1 As New OleDbParameter("@LiedNaam", oLied.LiedNaam)
            Dim oPar2 As New OleDbParameter("@LiedDuur", oLied.LiedDuur)
            Dim oPar3 As New OleDbParameter("@LiedID", oLied.LiedID)

            oCommand2.CommandText = sInsert
            oCommand2.Parameters.Add(oPar1)
            oCommand2.Parameters.Add(oPar2)
            oCommand2.Parameters.Add(oPar3)
            oCommand2.ExecuteNonQuery()
            oCon2.Close()


        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            Throw
        Finally
            '4. Connectie vrijgeven
            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function
#End Region

#Region "Verwijder lied"
    Public Shared Function VerwijderLied(ByVal sLiedId As String)
        'hier verwijdert men een lied
        Dim oCon As OleDbConnection
        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon3 As System.Data.OleDb.OleDbConnection
            oCon3 = New OleDbConnection(sValue)
            oCon3.Open()

            Dim oCommand3 As OleDbCommand
            oCommand3 = oCon3.CreateCommand()
            Dim sInsert As String

            sInsert = "DELETE FROM tblLied WHERE LiedID=?"

            Dim oPar As New OleDbParameter("@LiedID", sLiedId)
            oCommand3.CommandText = sInsert
            oCommand3.Parameters.Add(oPar)

            '3. Uitvoeren op de DB
            oCommand3.ExecuteNonQuery()
            oCon3.Close()
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            Throw
        Finally
            '4. Connectie vrijgeven
            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function
#End Region

End Class
