in

DotNetSide

Dot Net South Italy Developers User Group

Tips

Ado.Net

  • DataObjectAttribute e ObjectDataSource

    Autore: Mario Ferrante

    L’attributo DataObject rende più facile la ricerca delle classi che si vogliono legare ad un controllo DataBound durante la configurazione dell’ObjectDataSource.
    Quando si utilizza l’ObjectDataSource, la prima cosa che devo fare è scegliere l’oggetto Business da utilizzare per recuperare o gestire i dati e per legarli ad un controllo DataBound:

    Purtroppo se chiedo al wizard dell’ObjectDataSource di mostrarmi solo i “Data Components” (come in figura), la maggior parte delle volte il risultato che ottengo è un menù a discesa vuoto.
    Dunque non rimane che levare la spunta a “Show only data components” e cercare l’oggetto Business che mi interessa tra tutti quelli a cui è referenziata la mia applicazione, come si vede nella figura successiva.

     

    Poco male nel caso di piccole applicazioni, ma nel caso di applicazioni molto grandi o che comunque referenziano molti assemblies il problema diventa un po’ più serio.
    Ed è qui che viene in aiuto l’attributo DataObjectAttribute o semplicemente DataObject. Questo attributo può essere usato a livello di classe, ma anche a livello dei singoli metodi.

    L’Attributo DataObject a livello di classe
    Supponiamo che nella mia applicazione ho una classe che mi gestisce il CRUD (Create Retrieve Update e Delete) di News a cui aggiungo, a livello di classe, l’attributo DataObject:

     

     

    Imports System.ComponentModel Namespace Mario.DotNetSide <DataObject()> _ Public Class NewsManager 'Implementazione della Classe End Class End Namespace

     

    Il risultato sarà:

    Il costruttore dell’attributo DataObject accetta anche un parametro di tipo System.Boolean, se False dichiaro esplicitamente all’Object Data Source di non considerare quella classe come Data Component.
    L’Attributo DataObject a livello di metodo

    Abbiamo usato questo attributo a livello di Classe, ma lo posso utilizzare anche a livello di metodi per definire quali di essi devono essere utilizzati per selezionare i dati, quali per inserire un record, cancellarlo o modificarlo:

     

    <DataObject()> _ Public Class NewsManager <DataObjectMethod(DataObjectMethodType.Select, True)> _ Public Function GetNews() As NewsCollection End Function <DataObjectMethod(DataObjectMethodType.Insert, True)> _ Public Function AddNews(ByVal item As News) As Integer End Function End Class

    I valori dell’enumerazione DataObjectMethodType sono autoesplicativi:

    • Delete
    • Fill
    • Insert
    • Select
    • Update

    Il secondo parametro booleano passato all’attributo (True in questo caso) indica all Object Data Source se considerare (True) o meno (False) quel metodo per una determinata funzione (ad esempio di Select).
    In .Net gli attributi hanno una fondamentale importanza, essi contribuiscono a fornire tutte quelle informazioni che costituiscono i MetaData di un’assembly. Inoltre possono influenzare il comportamento di un oggetto sia a run-time sia (come in questo caso) a design-time.

  • Creazione di una stringa di connessione

    Autore: Vito Arconzo

    Ecco un comodissimo metodo (poco documentato) per la creazione di una stringa di connessione di qualsiasi tipo:

    • Creare un file di testo chiamato test.udl (in qualsiasi posizione);
    • Doppio click sul file appena creato;
    • Apparirà un wizard molto familiare, è lo stesso utilizzato da VS e tools vari in fase di creazione di stringhe di connessione;
    • Configurare la connessione al database utilizzando il provider che vi serve.

    Una volta terminata la creazione guidata e, naturalmente, confermata cliccando sul pulsanto OK, è possibile aprire il file udl con il notepad e, magia, all'interno troviamo la stringa di connessione pronta per essere copiata ed utilizzata a nostro piacimento.

    Posted Jun 12 2006, 10:12 AM by VitoA with no comments
    Filed under:
  • SqlParameter - Pulizia dei parametri di una query

    Autore: Vito Arconzo

    Spesso non possiamo o vogliamo utilizzare query parametriche. In queste situazioni utilizzo per avere una semplicissima ma molto efficace funzione che ripulisce e normalizza in valore da inserire in una query.

        Public Shared Function SqlParameter(ByVal Value As ObjectAs String

            Dim 
    sql As String String.Empty

            If 
    ((Value Is NothingOrElse (Value.GetType Is GetType(DBNull))) Then
                
    Value = String.Empty
            End If

            If 
    (Value.GetType Is GetType(String)) Then
                Return 
    ("'" & Value.ToString.Replace("'", "''") & "'")
            
    End If

            If 
    (((((Value.GetType Is GetType(Decimal)) _
            
    Or (Value.GetType Is GetType(Integer))) _
            
    Or (Value.GetType Is GetType(Long))) _
            
    Or (Value.GetType Is GetType(Short))) _
            
    Or (Value.GetType Is GetType(Byte))) Then
                Return 
    Value.ToString.Replace(","c, "."c)
            
    End If

            Return 
    sql

        
    End Function

    L'utilizzo è semplicissimo:

    Dim query As String = "SELECT * FROM clienti WHERE codice=" + SqlParameter(1)

    Anche se questa funzione ripulisce il valore passato alla query, il NON utilizzare query parametriche è una tecnica che può causare problemi di SQL INJECTION e va quindi evitata se non in casi particolari.

    Posted May 30 2006, 08:56 AM by VitoA with no comments
    Filed under:
Powered by Community Server (Commercial Edition), by Telligent Systems