Click here to Skip to main content
15,893,668 members
Articles / Programming Languages / Visual Basic

Luna Data Layer Code Generator for VB.NET

Rate me:
Please Sign up or sign in to vote.
4.56/5 (8 votes)
9 Sep 2011CPOL6 min read 60.8K   4.1K   38  
This article discusses Luna Data Layer Code Generator for VB.NET.
<Serializable()>
Public Class cDatabase

    Private _Nome As String = ""
    Public Property Nome As String
        Get
            Return _Nome
        End Get
        Set(ByVal value As String)
            _Nome = value
        End Set
    End Property

    Private _TipoOrigine As String
    Public Property TipoOrigine() As String
        Get
            Return _TipoOrigine
        End Get
        Set(ByVal value As String)
            _TipoOrigine = value
        End Set
    End Property

    Private _TipoSorgente As enTipoSorgente
    Friend Property TipoSorgente() As enTipoSorgente
        Get
            Return _TipoSorgente
        End Get
        Set(ByVal value As enTipoSorgente)
            _TipoSorgente = value
        End Set
    End Property

    Private _BufferClassiBase As String
    Public ReadOnly Property BufferClassiBase() As String
        Get
            Return _BufferClassiBase
        End Get
    End Property

    Private _BufferSQL As String = ""
    Public ReadOnly Property BufferSQL() As String
        Get
            Return _BufferSQL
        End Get
    End Property

    Public Relazioni As New List(Of cRelazioneTabella)

    Public Tabelle As New List(Of cTabella)

    Public Sub ElaboraStruttura()

        _BufferSQL = ""

        ElaboraClassi()
        ElaboraSQL()

    End Sub

    Private Function CreaTabellaSql(ByVal NomeTab As String) As String

        Dim buffer As String

        buffer = "DROP TABLE " & NomeTab & ";" & vbNewLine
        buffer &= "CREATE TABLE " & NomeTab & ";" & vbNewLine

        Return buffer

    End Function

    Private Function CreaChiaveSql(ByVal NomeTab As String, ByVal NomeCampoChiave As String) As String

        Dim buffer As String

        buffer = "CREATE INDEX idx" & NomeCampoChiave & " ON " & NomeTab & "(" & NomeCampoChiave & ") WITH PRIMARY;" & vbNewLine

        Return buffer

    End Function

    Private Function CreaCampoSql(ByVal NomeTab As String, ByRef Campo As cCampoDb) As String

        '"campo: " & col.Caption & " - allownull: " & col.AllowDBNull & " -  autoincrement: " & col.AutoIncrement & " - tipo: " & col.DataType.ToString & " - size: " & col.MaxLength & " - defaultvalue: " & col.DefaultValue & " - readonly:" & col.ReadOnly
        Dim buffer As String

        buffer = Campo.Nome

        Select Case Campo.TipoStringa

            Case Is = "int32"
                If Campo.Contatore Then
                    buffer &= " COUNTER "
                Else
                    buffer &= " INT"
                End If

            Case Is = "int16"
                If Campo.Contatore Then
                    buffer &= " COUNTER "
                Else
                    buffer &= " INT"
                End If


            Case Is = "String"

                If Campo.MaxLength < 256 Then
                    buffer &= " TEXT"
                Else
                    buffer &= " MEMO"
                End If

            Case Is = "Decimal"

                buffer &= " SINGLE"

            Case Is = "Boolean"
                buffer &= " YESNO "

            Case Else
                buffer &= " " & Campo.TipoStringa.ToUpper

        End Select

        '  buffer &= " " & Campo.DataType.Name

        If Campo.TipoStringa = "String" And Campo.MaxLength < 256 Then buffer &= " (" & Campo.MaxLength & ")"

        If Campo.DefaultValue.ToString.Length Then buffer &= " DEFAULT " & Campo.DefaultValue

        buffer &= " " & IIf(Campo.AllowDBNull, "NULL", "NOT NULL")

        buffer = "ALTER TABLE " & NomeTab & " ADD COLUMN " & buffer & ";" & vbNewLine
        'buffer &= ";" & vbNewLine

        Return buffer

    End Function

    Private Sub ElaboraSQL()

        Dim Tb As cTabella

        For Each Tb In Tabelle

            Dim NomeTab As String = Tb.NomeTabella

            If Tb.Selezionata Then

                _BufferSQL &= CreaTabellaSql(NomeTab)

                Dim Campo As cCampoDb, NomeCampoChiave As String = ""

                For Each Campo In Tb.Campi

                    If Campo.Ordinal = 0 Then
                        NomeCampoChiave = Campo.Nome

                    End If
                    _BufferSQL &= CreaCampoSql(NomeTab, Campo)
                Next

                _BufferSQL &= CreaChiaveSql(NomeTab, NomeCampoChiave)


                '_BufferSQL &= CreaInsertDati(NomeTab)


                _BufferSQL &= vbNewLine

            End If

        Next


    End Sub

    Private Function AggiungiIntestazione(Optional ByVal AggiungiImports As Boolean = True) As String

        Dim Buffer As String = ""

        Buffer = "#Region ""Author""" & vbNewLine
        Buffer &= "'Class created with Luna " & My.Application.Info.Version.Major & "." & My.Application.Info.Version.Minor & "." & My.Application.Info.Version.Build & "." & My.Application.Info.Version.Revision & vbNewLine
        Buffer &= "'Author: Diego Lunadei" & vbNewLine
        Buffer &= "'Date: " & Now.ToShortDateString & vbNewLine
        Buffer &= "#End Region" & vbNewLine & vbNewLine

        If AggiungiImports Then

            'imports System
            Buffer &= "Imports System" & vbNewLine
            'imports System.xml
            Buffer &= "Imports System.Xml" & vbNewLine
            Buffer &= "Imports System.Xml.Serialization" & vbNewLine
            'imports System.Data
            Buffer &= "Imports System.Data" & vbNewLine
            'imports System.Data.OleDb
            Buffer &= "Imports System.Data.OleDb" & vbNewLine & vbNewLine

        End If

        Return Buffer

    End Function

    Private Sub ElaboraClassi()

        'Nuova implementazione creare un singolo file e una singola tab per ogni classe e per ogni classe DAL
        'dare la possibilita di salvare in automatico i file in formato vb

        _BufferClassiBase = AggiungiBaseClass()

        Dim Tb As cTabella

        Dim Indice As Integer = 0

        For Each Tb In Tabelle

            If Tb.Selezionata Then

                Tb.CodiceClasseEntity = AggiungiIntestazione(True) '(False)
                Tb.CodiceClasse = AggiungiIntestazione(False)
                'non aggiungo piu l'intestazione perch� � contenuta nella classe Entity
                'Tb.CodiceDAL = AggiungiIntestazione()

                'NomeTab = NomeTab.Substring(0, 1).ToUpper & NomeTab.Substring(1).ToLower
                Tb.CodiceClasse &= "Public Class " & Tb.NomeClasse & vbNewLine & vbNewLine
                Tb.CodiceClasse &= "#Region ""Logic Field""" & vbNewLine & vbNewLine
                Tb.CodiceClasse &= "#End Region" & vbNewLine & vbNewLine

                Tb.CodiceClasse &= "#Region ""Method""" & vbNewLine & vbNewLine
                Tb.CodiceClasse &= "#End Region" & vbNewLine & vbNewLine
                Tb.CodiceClasse &= "End Class" & vbNewLine & vbNewLine

                Tb.CodiceClasseEntity &= "Partial Public Class " & Tb.NomeClasse
                Tb.CodiceClasseEntity &= vbNewLine & "Inherits LUNA.LunaBaseClass" & vbNewLine
                Tb.CodiceClasseEntity &= "'******IMPORTANT: Write your code in the Class object that use this Partial Class." & vbNewLine
                Tb.CodiceClasseEntity &= "'******So you can replace DAOClass and EntityClass without lost your code" & vbNewLine
                Tb.CodiceClasseEntity &= vbNewLine
                Tb.CodiceClasseEntity &= "Public Sub New()" & vbNewLine & vbNewLine
                Tb.CodiceClasseEntity &= "End Sub" & vbNewLine & vbNewLine
                Tb.CodiceClasseEntity &= "#Region ""Database Field Map""" & vbNewLine

                Dim Campo As cCampoDb, NomeCampoChiave As String = ""

                For Each Campo In Tb.Campi

                    If Campo.Ordinal = 0 Then
                        NomeCampoChiave = Campo.Nome
                    End If

                    Tb.CodiceClasseEntity &= CreaCampoClasse(Campo)

                Next

                Tb.CodiceClasseEntity &= "#End Region" & vbNewLine & vbNewLine

                'Le classi sono volutamente lasciate aperte per poi chiuderle una volta inserite le relazioni
                'Tb.CodiceClasse &= "End Class " & vbNewLine & vbNewLine

                Dim Dal As String
                Dal = AggiungiDAO(NomeCampoChiave, Tb)
                Tb.CodiceDAL &= Dal & vbNewLine

                'TODO: SISTEMARE l'accesso ai dati facendolo direttamente e non con le replace
                Select Case _TipoSorgente
                    'Case enTipoSorgente.Access
                    Case enTipoSorgente.SQLServer
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDb.OleDbConnection", "SqlClient.SqlConnection") 'DA SISTEMARE
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("System.Data.OleDb", "System.Data.SqlClient")
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDbCommand", "SqlCommand")
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDbDataReader", "SqlDataReader")
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDbTransaction", "SqlTransaction")
                    Case enTipoSorgente.Oracle
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDb.OleDbConnection", "OracleConnection") 'DA SISTEMARE
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("System.Data.OleDb", "System.Data.OracleClient")
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDbCommand", "OracleCommand")
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDbDataReader", "OracleDataReader")
                        Tb.CodiceDAL = Tb.CodiceDAL.Replace("OleDbTransaction", "OracleTransaction")
                End Select

                Indice += 1

                'qui metto tutte le classi figlie che trovo

                Dim Rel As cRelazioneTabella
                Tb.CodiceClasseEntity &= "#Region ""Embedded Class""" & vbNewLine & vbNewLine

                For Each Rel In Relazioni
                    Dim tbOrig As cTabella = Tabelle.Find(Function(item) item.NomeTabella = Rel.TabellaOrigine)
                    Dim tbDest As cTabella = Tabelle.Find(Function(item) item.NomeTabella = Rel.TabellaDestinazione)

                    If Rel.TabellaOrigine = Tb.NomeTabella Then
                        Tb.CodiceClasseEntity &= AggiungiRelazioneDiretta(Rel, tbOrig, tbDest)
                    ElseIf Rel.TabellaDestinazione = Tb.NomeTabella Then
                        Tb.CodiceClasseEntity &= AggiungiRelazioneInDiretta(Rel, tbOrig, tbDest)
                    End If

                Next

                Tb.CodiceClasseEntity &= "#End Region" & vbNewLine & vbNewLine

                Tb.CodiceClasseEntity &= "End Class " & vbNewLine & vbNewLine
            End If


        Next

    End Sub

    Private Function AggiungiRelazioneDiretta(ByVal Rel As cRelazioneTabella, ByVal TbOrig As cTabella, ByVal TbDest As cTabella) As String

        Dim buffer As String = ""

        If Rel.CampoOrigine = TbOrig.CampoChiave.Nome Then
            'se sto facendo una relazione dal mio campo chiave verso un altra tabella dove dentro c'e' il mio campo chiave e' una relazione uno a N quindi torno una List Of
            buffer &= "Private _List" & TbDest.NomeClasse & " as List(Of " & TbDest.NomeClasse & ")" & vbNewLine
            buffer &= vbNewLine
            buffer &= "<XmlElementAttribute(""List" & TbDest.NomeClasse & """)> _" & vbNewLine
            buffer &= "Public Property List" & TbDest.NomeClasse & "(Optional ByVal ForceLoad As Boolean = False) as List(Of " & TbDest.NomeClasse & ")" & vbNewLine
            buffer &= "Get" & vbNewLine
            buffer &= vbTab & "If _List" & TbDest.NomeClasse & " Is Nothing Or ForceLoad = True Then" & vbNewLine
            buffer &= vbTab & vbTab & "Dim Mgr As New " & TbDest.NomeClasseDAO & vbNewLine
            buffer &= vbTab & vbTab & "Dim Param1 As New LUNA.LunaSearchParameter(""" & Rel.CampoDestinazione & """, _" & Rel.CampoOrigine & ")" & vbNewLine
            buffer &= vbTab & vbTab & "_List" & TbDest.NomeClasse & " = Mgr.Find(Param1)" & vbNewLine
            buffer &= vbTab & "End If" & vbNewLine
            buffer &= vbTab & "Return _List" & TbDest.NomeClasse & vbNewLine
            buffer &= "End Get" & vbNewLine
            buffer &= "Set (ByVal value As List(Of " & TbDest.NomeClasse & "))" & vbNewLine
            buffer &= vbTab & "_List" & TbDest.NomeClasse & " = value" & vbNewLine
            buffer &= "End Set" & vbNewLine
            buffer &= "End Property" & vbNewLine & vbNewLine

        Else
            'se sto facendo una relazione non dal mio campo chiave verso un altra tabella al suo campo chiave e' una relazione 1 a 1 
            'qui anche devo caricare l'oggetto solo se non � gia caricato
            'qui devo entrarci se esiste il campo _CampoOrigine dentro la tabella destinazione
            If Not TbOrig.Campi.Find(Function(item) item.Nome = Rel.CampoOrigine) Is Nothing Then
                buffer &= "Private _" & TbDest.NomeClasse & " As " & TbDest.NomeClasse & vbNewLine
                buffer &= "Public property " & TbDest.NomeClasse & "(Optional ByVal ForceLoad As Boolean = False) As  " & TbDest.NomeClasse & vbNewLine
                buffer &= "Get" & vbNewLine
                buffer &= vbTab & "If _" & TbDest.NomeClasse & " Is Nothing Or ForceLoad = True Then" & vbNewLine
                buffer &= vbTab & vbTab & "Dim Mgr As New " & TbDest.NomeClasseDAO & vbNewLine
                buffer &= vbTab & vbTab & "_" & TbDest.NomeClasse & " = Mgr.Read(_" & Rel.CampoOrigine & ")" & vbNewLine
                buffer &= vbTab & "End If" & vbNewLine
                buffer &= vbTab & "Return _" & TbDest.NomeClasse & vbNewLine
                buffer &= "End Get" & vbNewLine
                buffer &= "Set(ByVal value As " & TbDest.NomeClasse & ")" & vbNewLine
                buffer &= vbTab & "_" & TbDest.NomeClasse & " = value" & vbNewLine
                buffer &= "End Set" & vbNewLine
                buffer &= "End Property" & vbNewLine & vbNewLine
            End If

        End If

        Return buffer

    End Function

    Private Function AggiungiRelazioneInDiretta(ByVal Rel As cRelazioneTabella, ByVal TbOrig As cTabella, ByVal TbDest As cTabella) As String

        Dim buffer As String = ""

        If Rel.CampoOrigine <> TbOrig.CampoChiave.Nome Then

            'se sto facendo una relazione dal mio campo chiave verso un altra tabella dove dentro c'e' il mio campo chiave e' una relazione uno a N quindi torno una List Of
            buffer &= "Private _List" & TbOrig.NomeClasse & " as List(Of " & TbOrig.NomeClasse & ")" & vbNewLine
            buffer &= vbNewLine
            buffer &= "<XmlElementAttribute(""List" & TbOrig.NomeClasse & """)> _" & vbNewLine
            buffer &= "Public Property List" & TbOrig.NomeClasse & "(Optional ByVal ForceLoad As Boolean = False) as List(Of " & TbOrig.NomeClasse & ")" & vbNewLine
            buffer &= "Get" & vbNewLine
            buffer &= vbTab & "If _List" & TbOrig.NomeClasse & " Is Nothing Or ForceLoad = True Then" & vbNewLine
            buffer &= vbTab & vbTab & "Dim Mgr As New " & TbOrig.NomeClasseDAO & vbNewLine
            buffer &= vbTab & vbTab & "Dim Param1 As New LUNA.LunaSearchParameter(""" & Rel.CampoOrigine & """, _" & Rel.CampoDestinazione & ")" & vbNewLine
            buffer &= vbTab & vbTab & "_List" & TbOrig.NomeClasse & " = Mgr.Find(Param1)" & vbNewLine
            buffer &= vbTab & "End If" & vbNewLine
            buffer &= vbTab & "Return _List" & TbOrig.NomeClasse & vbNewLine
            buffer &= "End Get" & vbNewLine
            buffer &= "Set (ByVal value As List(Of " & TbOrig.NomeClasse & "))" & vbNewLine
            buffer &= vbTab & "_List" & TbOrig.NomeClasse & " = value" & vbNewLine
            buffer &= "End Set" & vbNewLine
            buffer &= "End Property" & vbNewLine & vbNewLine

            'Else
            '    'se sto facendo una relazione non dal mio campo chiave verso un altra tabella al suo campo chiave e' una relazione 1 a 1 
            '    'qui anche devo caricare l'oggetto solo se non � gia caricato
            '    'qui devo entrarci se esiste il campo _CampoOrigine dentro la tabella destinazione
            '    If Not TbOrig.Campi.Find(Function(item) item.Nome = Rel.CampoOrigine) Is Nothing Then
            '        buffer &= "Private _" & TbDest.NomeClasse & " As " & TbDest.NomeClasse & vbNewLine
            '        buffer &= "Public property " & TbDest.NomeClasse & "(Optional ByVal ForceLoad As Boolean = False) As  " & TbDest.NomeClasse & vbNewLine
            '        buffer &= "Get" & vbNewLine
            '        buffer &= vbTab & "If _" & TbDest.NomeClasse & " Is Nothing Or ForceLoad = True Then" & vbNewLine
            '        buffer &= vbTab & vbTab & "Dim Mgr As New " & TbDest.NomeClasseDAO & vbNewLine
            '        buffer &= vbTab & vbTab & "_" & TbDest.NomeClasse & " = Mgr.Read(_" & Rel.CampoOrigine & ")" & vbNewLine
            '        buffer &= vbTab & "End If" & vbNewLine
            '        buffer &= vbTab & "Return _" & TbDest.NomeClasse & vbNewLine
            '        buffer &= "End Get" & vbNewLine
            '        buffer &= "Set(ByVal value As " & TbDest.NomeClasse & ")" & vbNewLine
            '        buffer &= vbTab & "_" & TbDest.NomeClasse & " = value" & vbNewLine
            '        buffer &= "End Set" & vbNewLine
            '        buffer &= "End Property" & vbNewLine & vbNewLine
            '    End If

        End If

        Return buffer

    End Function

    Private Function AggiungiBaseClass() As String
        Dim Buffer As String

        Buffer = AggiungiIntestazione()
        Buffer &= "Namespace LUNA" & vbNewLine & vbNewLine

        Buffer &= "Public Enum enLogicOperator" & vbNewLine
        Buffer &= vbTab & "enAND = 0" & vbNewLine
        Buffer &= vbTab & "enOR" & vbNewLine
        Buffer &= "End Enum" & vbNewLine & vbNewLine

        Buffer &= "Public MustInherit Class LunaBaseClass" & vbNewLine & vbNewLine

        Select Case _TipoSorgente
            Case enTipoSorgente.Access
                Buffer &= "Protected Shared _cn As OleDb.OleDbConnection" & vbNewLine
            Case enTipoSorgente.SQLServer
                Buffer &= "Protected Shared _cn As SqlClient.SqlConnection" & vbNewLine
            Case enTipoSorgente.Oracle
                Buffer &= "Protected Shared _cn As OracleConnection" & vbNewLine
        End Select

        Buffer &= "Protected Shared _ConnectionString As String = String.Empty" & vbNewLine & vbNewLine
        Buffer &= "Public Sub ManageError(ByVal ex As Exception)" & vbNewLine & vbNewLine

        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= "End Class" & vbNewLine & vbNewLine

        Buffer &= "Public MustInherit Class LunaBaseClassDAO(Of T)" & vbNewLine
        Buffer &= "Inherits LunaBaseClass" & vbNewLine & vbNewLine

        Buffer &= "Public Sub New()" & vbNewLine & vbNewLine
        Buffer &= vbTab & "'By default use ConnectionString in AppSettings" & vbNewLine
        Buffer &= vbTab & "_ConnectionString = My.Settings(""ConnectionString"").ToString" & vbNewLine
        Buffer &= vbTab & "OpenDBConnection()" & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Select Case _TipoSorgente
            Case enTipoSorgente.Access
                Buffer &= "Public Sub New(ByVal Connection As Data.OleDb.OleDbConnection)" & vbNewLine
            Case enTipoSorgente.SQLServer
                Buffer &= "Public Sub New(ByVal Connection As SqlClient.SqlConnection)" & vbNewLine
            Case enTipoSorgente.Oracle
                Buffer &= "Public Sub New(ByVal Connection As OracleConnection)" & vbNewLine
        End Select
        Buffer &= vbTab & "_cn = Connection" & vbNewLine
        Buffer &= vbTab & "OpenDBConnection()" & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= "Public Sub New(ByVal ConnectionString As string)" & vbNewLine
        Buffer &= vbTab & "if ConnectionString.Length <>0 then " & vbNewLine
        Buffer &= vbTab & vbTab & "_ConnectionString = ConnectionString" & vbNewLine
        Buffer &= vbTab & vbTab & "OpenDBConnection()" & vbNewLine
        Buffer &= vbTab & "End if" & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= "Public MustOverride Function Read(ByVal Id As Integer) As T" & vbNewLine
        Buffer &= "Public MustOverride Function Save(ByRef obj As T) As Integer" & vbNewLine
        Buffer &= "Public MustOverride Sub Delete(ByVal Id As Integer)" & vbNewLine
        Buffer &= "Public MustOverride Sub Delete(ByRef obj As T, Optional ByRef ListaObj As List(Of T) = Nothing)" & vbNewLine
        Buffer &= "Public MustOverride Function Find(ByVal ParamArray Parameter() As Luna.LunaSearchParameter) As IEnumerable(Of T)" & vbNewLine
        Buffer &= "Public MustOverride Function GetAll(Optional ByVal OrderByField As String = """", Optional ByVal AddEmptyItem As Boolean = False) As IEnumerable(Of T)" & vbNewLine & vbNewLine

        Buffer &= "Protected Function OpenDBConnection() As Integer" & vbNewLine

        Buffer &= "Dim Ris As Integer = 0" & vbNewLine
        Buffer &= "Try" & vbNewLine
        Buffer &= vbTab & "If _cn Is Nothing Then _cn = New OleDb.OleDbConnection" & vbNewLine
        Buffer &= vbTab & "if _cn.ConnectionString.Length =0 then _cn.ConnectionString = _ConnectionString" & vbNewLine
        Buffer &= vbTab & "If _cn.State <> Data.ConnectionState.Open Then _cn.Open()" & vbNewLine
        Buffer &= vbTab & "Catch ex As Exception" & vbNewLine
        Buffer &= vbTab & vbTab & "Ris = 1" & vbNewLine
        Buffer &= vbTab & "End Try" & vbNewLine
        Buffer &= vbTab & "Return Ris" & vbNewLine
        Buffer &= "End Function" & vbNewLine & vbNewLine

        Buffer &= "Protected Function CloseDbConnection() As Integer" & vbNewLine
        Buffer &= "Dim Ris As Integer = 0" & vbNewLine
        Buffer &= "Try" & vbNewLine
        Buffer &= vbTab & "If Not _cn Is Nothing Then" & vbNewLine
        Buffer &= vbTab & vbTab & "If _cn.State = ConnectionState.Open Then" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "_cn.Close()" & vbNewLine
        Buffer &= vbTab & vbTab & "End If" & vbNewLine
        Buffer &= vbTab & "_cn = Nothing" & vbNewLine
        Buffer &= vbTab & "End If" & vbNewLine

        Buffer &= "Catch ex As Exception" & vbNewLine
        Buffer &= vbTab & "Ris = 1" & vbNewLine
        Buffer &= "End Try" & vbNewLine

        Buffer &= "Return Ris" & vbNewLine

        Buffer &= "End Function" & vbNewLine & vbNewLine

        Buffer &= "Public Function Ap(ByVal Testo) As String" & vbNewLine
        Buffer &= "Dim str As String = String.Empty" & vbNewLine
        Buffer &= "If Not TypeOf Testo Is String Then" & vbNewLine
        Buffer &= vbTab & "Str = "" "" & Testo.ToString" & vbNewLine
        Buffer &= "Else" & vbNewLine
        Buffer &= vbTab & "Str = Testo.ToString" & vbNewLine
        Buffer &= vbTab & "Str = Str.Replace(""'"", ""''"")" & vbNewLine
        Buffer &= vbTab & "Str = "" '"" & Str & ""'""" & vbNewLine
        Buffer &= "End If" & vbNewLine
        Buffer &= "Return Str" & vbNewLine
        Buffer &= "End Function" & vbNewLine & vbNewLine

        'METODI DI SERIALIZZAZIONE
        Buffer &= "#Region ""Serialization Method""" & vbNewLine
        Buffer &= AggiungiLeggiSerialize()
        Buffer &= AggiungiSalvaSerialize()



        Buffer &= "#End Region" & vbNewLine & vbNewLine

        Buffer &= "End Class" & vbNewLine & vbNewLine

        Buffer &= "Public Class LunaSearchParameter" & vbNewLine & vbNewLine
        Buffer &= "Public Sub New()" & vbNewLine & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine
        Buffer &= "Public Sub New(ByVal FieldName As String, ByVal Value As Object, Optional ByVal SqlOperator As String = """",Optional ByVal LogicOperator  As enLogicOperator = enLogicOperator.enAND)" & vbNewLine
        Buffer &= vbTab & "_FieldName = FieldName" & vbNewLine
        Buffer &= vbTab & "_Value = Value" & vbNewLine
        Buffer &= vbTab & "If SqlOperator.Length Then _SqlOperator = SqlOperator" & vbNewLine
        Buffer &= vbTab & "_LogicOperator = LogicOperator" & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= "Private _SqlOperator As String = "" = """ & vbNewLine
        Buffer &= "Public Property SqlOperator As String" & vbNewLine
        Buffer &= vbTab & "Get" & vbNewLine
        Buffer &= vbTab & vbTab & "Return _SqlOperator" & vbNewLine
        Buffer &= vbTab & "End Get" & vbNewLine
        Buffer &= vbTab & "Set(ByVal value As String)" & vbNewLine
        Buffer &= vbTab & vbTab & "_SqlOperator = value" & vbNewLine
        Buffer &= vbTab & "End Set" & vbNewLine
        Buffer &= "End Property" & vbNewLine & vbNewLine

        Buffer &= "Private _LogicOperator As enLogicOperator = enLogicOperator.enAND" & vbNewLine
        Buffer &= "Public Property LogicOperator As enLogicOperator" & vbNewLine
        Buffer &= vbTab & "Get" & vbNewLine
        Buffer &= vbTab & vbTab & "Return _LogicOperator" & vbNewLine
        Buffer &= vbTab & "End Get" & vbNewLine
        Buffer &= vbTab & "Set(ByVal value As enLogicOperator)" & vbNewLine
        Buffer &= vbTab & vbTab & "_LogicOperator = value" & vbNewLine
        Buffer &= vbTab & "End Set" & vbNewLine
        Buffer &= "End Property" & vbNewLine & vbNewLine

        Buffer &= "Public ReadOnly Property LogicOperatorStr As String" & vbNewLine
        Buffer &= vbTab & "Get" & vbNewLine
        Buffer &= vbTab & vbTab & "If _LogicOperator = enLogicOperator.enAND Then" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "Return "" And """ & vbNewLine
        Buffer &= vbTab & vbTab & " Else" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "Return "" Or """ & vbNewLine
        Buffer &= vbTab & vbTab & "End If" & vbNewLine
        Buffer &= vbTab & "End Get" & vbNewLine
        Buffer &= "End Property" & vbNewLine & vbNewLine

        Buffer &= "Private _FieldName As String" & vbNewLine
        Buffer &= "Public Property FieldName As String" & vbNewLine
        Buffer &= vbTab & "Get" & vbNewLine
        Buffer &= vbTab & vbTab & "Return _FieldName" & vbNewLine
        Buffer &= vbTab & "End Get" & vbNewLine
        Buffer &= vbTab & "Set(ByVal value As String)" & vbNewLine
        Buffer &= vbTab & vbTab & "_FieldName = value" & vbNewLine
        Buffer &= vbTab & "End Set" & vbNewLine
        Buffer &= "End Property" & vbNewLine & vbNewLine

        Buffer &= "Private _Value" & vbNewLine
        Buffer &= "Public Property Value" & vbNewLine
        Buffer &= vbTab & "Get" & vbNewLine
        Buffer &= vbTab & vbTab & "Return _Value" & vbNewLine
        Buffer &= vbTab & "End Get" & vbNewLine
        Buffer &= vbTab & "Set(ByVal value)" & vbNewLine
        Buffer &= vbTab & vbTab & "_Value = value" & vbNewLine
        Buffer &= vbTab & "End Set" & vbNewLine
        Buffer &= "End Property" & vbNewLine & vbNewLine

        Buffer &= "End Class" & vbNewLine & vbNewLine
        Buffer &= "End Namespace" & vbNewLine & vbNewLine
        Return Buffer
    End Function

    Private Function AggiungiDAO(ByVal NomeCampoChiave As String, ByRef TB As cTabella) As String

        Dim ListaCampi As String = ""
        For Each cam As cCampoDb In TB.Campi
            ListaCampi &= cam.Nome & ","
        Next
        ListaCampi = ListaCampi.TrimEnd(",")

        Dim c As cCampoDb
        Dim Buffer As String


        Buffer = "Public Class " & TB.NomeClasseDAO & vbNewLine
        Buffer &= "Inherits LUNA.LunaBaseClassDAO(Of " & TB.NomeClasse & ")" & vbNewLine & vbNewLine

        Buffer &= "Public Sub New()" & vbNewLine
        Buffer &= vbTab & "MyBase.New()" & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine


        Buffer &= "Public Sub New(ByVal Connection As Data.OleDb.OleDbConnection)" & vbNewLine
        Buffer &= vbTab & "MyBase.New(Connection)" & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= "Public Sub New(ByVal ConnectionString As string)" & vbNewLine
        Buffer &= vbTab & "MyBase.New(ConnectionString)" & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= AggiungiLeggi(NomeCampoChiave, TB)
        Buffer &= AggiungiSalva(NomeCampoChiave, TB)
        Buffer &= AggiungiSalvaCascade(NomeCampoChiave, TB)
        'TODO:WriteCascade
        Buffer &= AggiungiElimina(NomeCampoChiave, TB)

        Buffer &= "Public Overloads Function Find(ByVal OrderBy As String, ByVal ParamArray Parameter() As LUNA.LunaSearchParameter) as iEnumerable(Of " & TB.NomeClasse & ")" & vbNewLine
        Buffer &= "Return FindReal(OrderBy, Parameter)" & vbNewLine
        Buffer &= "End Function" & vbNewLine & vbNewLine
        Buffer &= "Public Overrides Function Find(ByVal ParamArray Parameter() As LUNA.LunaSearchParameter) as iEnumerable(Of " & TB.NomeClasse & ")" & vbNewLine
        Buffer &= "Return FindReal("""", Parameter)" & vbNewLine
        Buffer &= "End Function" & vbNewLine & vbNewLine
        Buffer &= "Private Function FindReal(ByVal OrderBy As String, ByVal ParamArray Parameter() As LUNA.LunaSearchParameter) as iEnumerable(Of " & TB.NomeClasse & ")" & vbNewLine
        Buffer &= "Dim Ls As New List(Of " & TB.NomeClasse & ")" & vbNewLine
        Buffer &= "Try" & vbNewLine & vbNewLine
        Buffer &= "Dim myCommand As OleDbCommand = _cn.CreateCommand()" & vbNewLine
        Buffer &= "Dim sql As String = """ & vbNewLine

        Buffer &= "sql =""SELECT " & ListaCampi & " from " & TB.NomeTabella & """" & vbNewLine

        Buffer &= "For Each Par As LUNA.LunaSearchParameter In Parameter" & vbNewLine
        Buffer &= vbTab & "If Not Par Is Nothing Then" & vbNewLine
        Buffer &= vbTab & vbTab & "If Sql.IndexOf(""WHERE"") = -1 Then Sql &= "" WHERE "" Else Sql &=  "" "" & Par.LogicOperatorStr & "" """ & vbNewLine
        Buffer &= vbTab & vbTab & "Sql &= Par.FieldName & "" "" & Par.SqlOperator & "" "" & Ap(Par.Value)" & vbNewLine
        Buffer &= vbTab & "End if" & vbNewLine
        Buffer &= "Next" & vbNewLine & vbNewLine

        Buffer &= "If OrderBy.Length Then Sql &= "" ORDER BY "" & OrderBy" & vbNewLine & vbNewLine

        Buffer &= "myCommand.CommandText = sql" & vbNewLine
        Buffer &= "Dim myReader As OleDbDataReader = myCommand.ExecuteReader()" & vbNewLine

        Buffer &= "while myReader.Read" & vbNewLine
        Buffer &= vbTab & "Dim classe as new " & TB.NomeClasse & vbNewLine

        For Each c In TB.Campi
            Buffer &= vbTab & "if not myReader(""" & c.Nome & """) is DBNull.Value then classe." & c.Nome & " = myReader(""" & c.Nome & """)" & vbNewLine
        Next

        Buffer &= vbTab & "Ls.Add(classe)" & vbNewLine
        Buffer &= "end while" & vbNewLine

        Buffer &= "myReader.Close()" & vbNewLine
        Buffer &= "myCommand.Dispose()" & vbNewLine & vbNewLine
        Buffer &= "Catch ex As Exception" & vbNewLine
        Buffer &= vbTab & "ManageError(ex)" & vbNewLine
        Buffer &= "End Try" & vbNewLine
        Buffer &= "Return Ls" & vbNewLine

        Buffer &= "End Function" & vbNewLine & vbNewLine

        Buffer &= "Public Overrides Function GetAll(Optional OrderByField as string = """", Optional ByVal AddEmptyItem As Boolean = False) as iEnumerable(Of " & TB.NomeClasse & ")" & vbNewLine

        Buffer &= "Dim Ls As New List(Of " & TB.NomeClasse & ")" & vbNewLine
        Buffer &= "Try" & vbNewLine & vbNewLine
        Buffer &= "Dim myCommand As OleDbCommand = _cn.CreateCommand()" & vbNewLine
        Buffer &= "Dim sql As String = """ & vbNewLine
        Buffer &= "sql =""SELECT " & ListaCampi & " from " & TB.NomeTabella & """" & vbNewLine
        Buffer &= "If OrderByField.Length Then" & vbNewLine
        Buffer &= vbTab & "Sql &= "" ORDER BY "" & OrderByField" & vbNewLine
        Buffer &= "End If" & vbNewLine & vbNewLine
        Buffer &= "myCommand.CommandText = sql" & vbNewLine
        Buffer &= "Dim myReader As OleDbDataReader = myCommand.ExecuteReader()" & vbNewLine

        Buffer &= "If AddEmptyItem Then Ls.Add(New  " & TB.NomeClasse & "() With {"
        For Each c In TB.Campi
            Buffer &= "." & c.Nome & c.ValoreDefault & ","
        Next

        Buffer = Buffer.TrimEnd(",")

        '.IdGruppo = 0, .Nome = "" - All""
        Buffer &= "})" & vbNewLine
        Buffer &= "while myReader.Read" & vbNewLine
        Buffer &= vbTab & "Dim classe as new " & TB.NomeClasse & vbNewLine

        For Each c In TB.Campi
            Buffer &= vbTab & "if not myReader(""" & c.Nome & """) is DBNull.Value then classe." & c.Nome & " = myReader(""" & c.Nome & """)" & vbNewLine
        Next

        Buffer &= vbTab & "Ls.Add(classe)" & vbNewLine
        Buffer &= "end while" & vbNewLine

        Buffer &= "myReader.Close()" & vbNewLine
        Buffer &= "myCommand.Dispose()" & vbNewLine & vbNewLine
        Buffer &= "Catch ex As Exception" & vbNewLine
        Buffer &= vbTab & "ManageError(ex)" & vbNewLine
        Buffer &= "End Try" & vbNewLine
        Buffer &= "Return Ls" & vbNewLine

        Buffer &= "End Function" & vbNewLine

        Buffer &= "End Class" & vbNewLine & vbNewLine

        Return Buffer

    End Function

    Private Function AggiungiLeggiSerialize() As String

        Dim buffer As String = ""
        buffer &= "Public Function ReadSerialize(ByVal PathXMLSerial As String) as T" & vbNewLine & vbNewLine
        buffer &= "Dim cls As T" & vbNewLine
        buffer &= vbTab & "Try" & vbNewLine
        buffer &= vbTab & vbTab & "Dim serialize As XmlSerializer = New XmlSerializer(GetType(T))" & vbNewLine
        buffer &= vbTab & vbTab & "Dim deSerialize As IO.FileStream = New IO.FileStream(PathXMLSerial, IO.FileMode.Open)" & vbNewLine
        buffer &= vbTab & vbTab & "cls = serialize.Deserialize(deSerialize)" & vbNewLine
        buffer &= vbTab & "Catch ex As Exception" & vbNewLine
        buffer &= vbTab & vbTab & "ManageError(ex)" & vbNewLine
        buffer &= vbTab & "End Try" & vbNewLine & vbNewLine
        buffer &= "Return cls" & vbNewLine
        buffer &= "End function" & vbNewLine



        Return buffer

    End Function

    Private Function AggiungiLeggi(ByVal NomeCampoChiave As String, ByVal x As cTabella) As String

        'TODO: Da rivedere meglio e ottimizzare

        Dim Buffer As String
        Buffer = "Public Overrides Function Read(Id as integer) as " & x.NomeClasse & vbNewLine
        Buffer &= "Dim cls as new " & x.NomeClasse & vbNewLine & vbNewLine

        Buffer &= "Try" & vbNewLine

        Buffer &= "Dim myCommand As OleDbCommand = _cn.CreateCommand()" & vbNewLine
        Buffer &= "myCommand.CommandText = ""SELECT * FROM " & x.NomeTabella & " where " & NomeCampoChiave & " = "" & Id" & vbNewLine
        'Buffer &= Istruzione("select1", NomeTab, NomeCampoChiave) & vbNewLine
        Buffer &= "Dim myReader As OleDbDataReader = myCommand.ExecuteReader()" & vbNewLine
        Buffer &= "myReader.Read()" & vbNewLine
        Buffer &= "if myReader.HasRows then" & vbNewLine

        Dim col As cCampoDb
        For Each col In x.Campi

            If col.AllowDBNull Then Buffer &= vbTab & "if not myReader(""" & col.Nome & """) is DBNull.Value then" & vbNewLine & vbTab

            Buffer &= vbTab & "cls." & col.Nome & "= myReader(""" & col.Nome & """)"

            'If col.AllowDBNull Then Buffer &= ".toString"

            If col.AllowDBNull Then Buffer &= vbNewLine & vbTab & "end if"

            Buffer &= vbNewLine
        Next
        Buffer &= "End If" & vbNewLine

        Buffer &= "myReader.Close()" & vbNewLine
        Buffer &= "myCommand.Dispose()" & vbNewLine & vbNewLine

        Buffer &= "Catch ex As Exception" & vbNewLine
        Buffer &= vbTab & "ManageError(ex)" & vbNewLine
        Buffer &= "End Try" & vbNewLine
        Buffer &= "Return cls" & vbNewLine
        Buffer &= "End Function" & vbNewLine & vbNewLine
        Return Buffer

    End Function

    Private Function AggiungiElimina(ByVal NomeCampoChiave As String, ByVal TB As cTabella)
        Dim Buffer As String = ""

        Buffer &= "Private Sub DestroyPermanently(Id as integer) " & vbNewLine

        Buffer &= "Try" & vbNewLine & vbNewLine
        Buffer &= "Dim UpdateCommand As OleDbCommand = New OleDbCommand()" & vbNewLine
        Buffer &= "UpdateCommand.Connection = _cn" & vbNewLine & vbNewLine
        Buffer &= "'******IMPORTANT: You can use this commented instruction to make a logical delete ." & vbNewLine
        Buffer &= "'******Replace DELETED Field with your logic deleted field name." & vbNewLine
        Buffer &= "'Dim Sql As String = ""UPDATE " & TB.NomeTabella & " SET DELETED=True """ & vbNewLine
        Buffer &= "Dim Sql As String = ""DELETE FROM " & TB.NomeTabella & """" & vbNewLine

        Buffer &= "Sql &= "" Where " & NomeCampoChiave & " = "" & Id " & vbNewLine & vbNewLine

        Buffer &= "UpdateCommand.CommandText = Sql" & vbNewLine

        Buffer &= "UpdateCommand.ExecuteNonQuery()" & vbNewLine
        Buffer &= "UpdateCommand.Dispose()" & vbNewLine

        Buffer &= "Catch ex As Exception" & vbNewLine
        Buffer &= vbTab & "ManageError(ex)" & vbNewLine
        Buffer &= "End Try" & vbNewLine

        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= "Public Overrides Sub Delete(Id as integer) " & vbNewLine & vbNewLine
        Buffer &= "DestroyPermanently (Id)" & vbNewLine & vbNewLine
        Buffer &= "End Sub" & vbNewLine & vbNewLine

        Buffer &= "Public Overrides Sub Delete(byref obj as " & TB.NomeClasse & ", Optional ByRef ListaObj as List (of " & TB.NomeClasse & ") = Nothing)" & vbNewLine & vbNewLine
        Buffer &= "DestroyPermanently (obj." & NomeCampoChiave & ")" & vbNewLine
        Buffer &= "If Not ListaObj Is Nothing Then ListaObj.Remove(obj)" & vbNewLine & vbNewLine

        Buffer &= "End Sub" & vbNewLine & vbNewLine



        Return Buffer
    End Function

    Private Function AggiungiSalvaCascade(ByVal NomeCampoChiave As String, ByVal x As cTabella) As String

        '''Aggiunge il salvataggio a cascata
        Dim Buffer As String = ""



        Return Buffer

    End Function

    Private Function AggiungiSalva(ByVal NomeCampoChiave As String, ByVal x As cTabella) As String

        'TODO: Da rivedere meglio e ottimizzare

        Dim Buffer As String
        Buffer = "Public Overrides Function Save(byRef cls as " & x.NomeClasse & ") as Integer" & vbNewLine & vbNewLine

        Buffer &= "Dim Ris as integer=0 'in Ris torno l'id inserito" & vbNewLine & vbNewLine
        Buffer &= "Dim DbCommand As OleDbCommand = New OleDbCommand()" & vbNewLine
        Buffer &= "Dim myTransaction As OleDbTransaction" & vbNewLine

        Buffer &= vbTab & "Try" & vbNewLine
        Buffer &= vbTab & vbTab & "Dim sql As String" & vbNewLine
        Buffer &= vbTab & vbTab & "DbCommand.Connection = _cn" & vbNewLine
        Buffer &= vbTab & vbTab & "myTransaction = _cn.BeginTransaction" & vbNewLine
        Buffer &= vbTab & vbTab & "DbCommand.Transaction = myTransaction" & vbNewLine
        Buffer &= vbTab & vbTab & "If cls." & NomeCampoChiave & " = 0 Then" & vbNewLine

        Buffer &= vbTab & vbTab & vbTab & "sql = ""INSERT INTO " & x.NomeTabella & "(" & """" & vbNewLine

        Dim col As cCampoDb
        For Each col In x.Campi
            If col.Nome <> NomeCampoChiave Then
                Buffer &= vbTab & vbTab & vbTab & "sql &= """ & col.Nome
                If col.Ordinal + 1 <> x.Campi.Count Then
                    Buffer &= ","
                End If

                Buffer &= """" & vbNewLine
            End If
        Next

        Buffer &= vbTab & vbTab & vbTab & vbTab & "sql &= "") VALUES (""" & vbNewLine

        For Each col In x.Campi

            If col.Nome <> NomeCampoChiave Then
                Select Case col.TipoStringa
                    Case "int16", "int32", "single", "double"
                        Buffer &= vbTab & "sql &= cls." & col.Nome
                    Case "Boolean"
                        Buffer &= vbTab & "sql &= iif(cls." & col.Nome & ",-1,0)"
                    Case Else
                        Buffer &= vbTab & "sql &= ap(cls." & col.Nome & ")"
                End Select

                If col.Ordinal + 1 <> x.Campi.Count Then
                    Buffer &= " & "","""
                End If

                Buffer &= vbNewLine
            End If
        Next
        Buffer &= vbTab & vbTab & vbTab & vbTab & "sql &= "")""" & vbNewLine
        Buffer &= vbTab & vbTab & "Else" & vbNewLine

        Buffer &= vbTab & vbTab & vbTab & "sql = ""UPDATE " & x.NomeTabella & " SET """ & vbNewLine

        For Each col In x.Campi
            If col.Nome <> NomeCampoChiave Then
                Buffer &= vbTab & vbTab & vbTab & "sql &= """ & col.Nome & " = """

                Select Case col.TipoStringa
                    Case "int16", "int32", "single", "double"
                        Buffer &= " & cls." & col.Nome
                    Case "Boolean"
                        Buffer &= " & iif(cls." & col.Nome & ",true,False)"
                    Case Else
                        Buffer &= " & ap(cls." & col.Nome & ")"
                End Select
                If col.Ordinal + 1 <> x.Campi.Count Then
                    Buffer &= " & "","""
                End If

                Buffer &= vbNewLine
            End If
        Next

        Buffer &= vbTab & vbTab & vbTab & vbTab & "sql &= "" WHERE " & NomeCampoChiave & "= "" & cls." & NomeCampoChiave & vbNewLine

        Buffer &= vbTab & vbTab & "End if" & vbNewLine

        Buffer &= vbTab & vbTab & "DbCommand.CommandText = sql" & vbNewLine
        Buffer &= vbTab & vbTab & "DbCommand.ExecuteNonQuery()" & vbNewLine & vbNewLine

        Buffer &= vbTab & vbTab & " If cls." & NomeCampoChiave & "=0 Then" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "Dim IdInserito as integer = 0" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "Sql = ""select @@identity""" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "DbCommand.CommandText = Sql" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "Idinserito = DbCommand.ExecuteScalar()" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "cls." & NomeCampoChiave & " = Idinserito" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "Ris  = Idinserito" & vbNewLine
        Buffer &= vbTab & vbTab & "else" & vbNewLine
        Buffer &= vbTab & vbTab & vbTab & "Ris  =  cls." & NomeCampoChiave & vbNewLine
        Buffer &= vbTab & vbTab & "End If" & vbNewLine & vbNewLine
        Buffer &= vbTab & vbTab & "myTransaction.Commit()" & vbNewLine
        Buffer &= vbTab & vbTab & "DbCommand.Dispose()" & vbNewLine & vbNewLine

        Buffer &= vbTab & "Catch ex As Exception" & vbNewLine
        Buffer &= vbTab & vbTab & "myTransaction.RollBack()" & vbNewLine
        Buffer &= vbTab & vbTab & "ManageError(ex)" & vbNewLine
        Buffer &= vbTab & "End Try" & vbNewLine
        Buffer &= "Return Ris" & vbNewLine

        Buffer &= "End Function" & vbNewLine & vbNewLine
        Return Buffer

    End Function

    Private Function AggiungiSalvaSerialize() As String
        Dim buffer As String = ""

        buffer &= "Public Sub SaveSerialize(Obj as T, ByVal PathXML As String)" & vbNewLine & vbNewLine

        buffer &= "Try" & vbNewLine
        buffer &= vbTab & "Dim serialize As XmlSerializer = New XmlSerializer(GetType(T))" & vbNewLine
        buffer &= vbTab & "Dim Writer As New System.IO.StreamWriter(PathXML)" & vbNewLine
        buffer &= vbTab & "serialize.Serialize(Writer, Obj)" & vbNewLine
        buffer &= vbTab & "Writer.Close()" & vbNewLine

        buffer &= vbTab & "Catch ex As Exception" & vbNewLine
        buffer &= vbTab & vbTab & "ManageError(ex)" & vbNewLine
        buffer &= vbTab & "End Try" & vbNewLine & vbNewLine

        buffer &= "End Sub" & vbNewLine

        Return buffer

    End Function

    Private Function CreaCampoClasse(ByRef Campo As cCampoDb) As String

        '"campo: " & col.Caption & " - allownull: " & col.AllowDBNull & " -  autoincrement: " & col.AutoIncrement & " - tipo: " & col.DataType.ToString & " - size: " & col.MaxLength & " - defaultvalue: " & col.DefaultValue & " - readonly:" & col.ReadOnly
        Dim buffer As String

        buffer = vbNewLine & "Private _" & Campo.Nome & " as " & Campo.TipoStringa & Campo.ValoreDefault

        buffer &= vbNewLine & vbNewLine
        buffer &= "<XmlElementAttribute(""" & Campo.Nome & """)> _" & vbNewLine
        buffer &= "Public property " & Campo.Nome & "() as " & Campo.TipoStringa & vbNewLine
        buffer &= "Get" & vbNewLine
        buffer &= vbTab & "Return _" & Campo.Nome & vbNewLine
        buffer &= "End Get" & vbNewLine
        buffer &= "Set (byval value as " & Campo.TipoStringa & ")" & vbNewLine
        buffer &= vbTab & "_" & Campo.Nome & "= value" & vbNewLine
        buffer &= "End Set" & vbNewLine
        buffer &= "End property " & vbNewLine

        Return buffer

    End Function

End Class


By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions