Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [ASP.net - VB.Net] Nothing, VBNull che scocciatura, best pratice

    Ciao a tutti,
    Ho notato con piacere che gestire le cose in oggetto è una gran scocciatura.
    Io ho impostato le cose in questo modo :

    Le proprietà delle mie entity in questo modo :
    codice:
    Public Class contatore
        Public id As Integer?
        Public idMarca As Integer?
        Public idModello As Integer?
        Public matricola As String
        Public tipoContatore As String
        Public annoScadenza As Integer?
        Public dataInstallazione As Date
        Public dataRimozione As Date
        Public annoCostruzione As Integer?
        Public omologazione As String
        Public nCifre As Integer?
        Public idPdr As Integer?
    .....
    Poi nella mia classe db mi sono avvalso di 3 metodi :
    codice:
        '---------------------------------------------------
        ' Funzioni utili a trattare variabili da e verso DB
        '---------------------------------------------------
        Public Function getValueOrNothing(ByVal val)
            If Convert.IsDBNull(val) Then
                Return Nothing
            Else
                Return val
            End If
        End Function
    
        Public Function setValueOrDbNull(ByVal val)
            If IsNothing(val) Then
                Return DBNull.Value
            Else
                Return val
            End If
        End Function
    
        Public Function getValueOrDefault(ByRef val, ByVal defaul)
            If IsNothing(val) Or IsDBNull(val) Then
                Return defaul
            Else
                Return val
            End If
        End Function
    getValueOrNothing la uso dopo ogni select andandomi a valorizzare le mie proprietà delle entita :
    Es :
    codice:
        Private Function load() As Boolean
            Try
                Dim dr As SqlDataReader
                dr = db.getDataReader()
                If dr.Read() = False Then
                    Return False
                End If
                Me.id = db.getValueOrNothing(dr("cont_id"))
                Me.idMarca = db.getValueOrNothing(dr("cont_idMarca"))
                Me.idModello = db.getValueOrNothing(dr("cont_idModello"))
                Me.matricola = db.getValueOrNothing(dr("cont_matricola"))
                Me.tipoContatore = db.getValueOrNothing(dr("cont_tipoContatore"))
    ......
    
            Catch ex As Exception
                Me.lastError = ex.Message
                Return False
            End Try
        End Function
    setValueOrDbNull questa la uso quando devo comporre la insert o update sui parametri :
    codice:
     Dim parameters() As SqlParameter = New SqlParameter() _
                {
                    New SqlParameter("@idMarca", SqlDbType.Int) With {.Value = setValueOrDbNull (Me.idMarca)},
                    New SqlParameter("@idModello", SqlDbType.Int) With {.Value = setValueOrDbNull Me.idModello)},
                    New SqlParameter("@matricola", SqlDbType.VarChar, Me.matricola.Length) With {.Value = setValueOrDbNull Me.matricola)},
                    New SqlParameter("@tipoContatore", SqlDbType.VarChar, Me.tipoContatore.Length) With {.Value = setValueOrDbNull (Me.tipoContatore)},
    
    ......
    Infine getValueOrDefault quando devo stampare un valore dalla mia entità :

    tipoContatore(me.tipoContatore,"")

    Impressioni???
    Voi come agite??? A me pare tutto un pò macchinoso.
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    in estrazione dati da SQL io uso ISNull(<nomecampo>,<valore alternativo>) nella query in genere... in inserimento/upd metto un defaultvalue nel parametro...
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    cavoli entrambi i metodi non li sapevo.

    ma per esempio i valori integer o date, che tipo di valore di ritorno usi?
    Te lo chiedo perchè non riesco a capire come poi riesci a valorizzare la variabile.

    Per SqlParameter come fai ad impostare un valore di default, non riesco a capirlo dalla guida di visual studio.
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Mi faccio restituire dei valori convenzionali che poi verifico via codice, ad esempio per integer ISNull(campo, -1) e per date una data dell'anno 2999...
    Per settare un defaultvalue ad un parametro di tipo datetime ad esempio
    SqlDataSource2.UpdateParameters("DateToUpdate").De faultValue = Now()
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    ok chiarissimo.
    Percui tutte le tue variabili in applicazioni non saranno mai settate a nothing o null nel caso usi c# giusto?
    Se è corretta la mia deduzione per quale motivo non le usi? ritieni che sia più semplice gestire le variabili not nullable e con valori prestabiliti?

    Scusa se ti stresso, ma con asp.net ho affrontato il dramma della tipizzazione delle variabili ed è un pò ostico capire la strada da prendere.
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    a parte che uso VB ( ) dipende dalle situazioni ma trovo più veloce valorizzare una variabile di tipo datetime con una data tipo 01/01/2999 e poi decidere cosa farne ... ci saranno soluzioni più fini tecnicamente ma per quello che devo fare io di solito questa è rapida ed efficace
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.