Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Una Classe in .NET per connettersi a più database

    Salve a tutti,
    volevo segnalarvi questo progetto sul quale ho lavorato ultimamente e per il quale volevo un vostro parere.

    Una Classe in .NET per accedere a più database

    Fondamentalmente è un classe che semplifica il codice necessario per collegarsi ad un database e per effettuare le comuni operazioni sui dati e in più permette di astrarre l'applicazione dal database utilizzato, permettendo molto semplicemente e modificando un solo parametro, di connettersi ad n database diversi.

    Mi piacerebbe leggere le vostre impressioni, sperando che possa essere altrettanto utile a voi quanto lo è stata per me.
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  2. #2
    ado.net 2.0 offre gia un sistema per utilizzare oggetti generici e non legati allo specifico db. Cmq, dopo una rapidissima occhiata, i parametri come li passi?
    Saluti a tutti
    Riccardo

  3. #3
    Originariamente inviato da riccardone
    ado.net 2.0 offre gia un sistema per utilizzare oggetti generici e non legati allo specifico db. Cmq, dopo una rapidissima occhiata, i parametri come li passi?
    Hai ragione, io infatti ho usato gli oggetti standard .NET 2.0 tipo i DBProviderFactories per slegare il codice dal database, in realtà non mi sono inventato niente, ho solo implementato questi nuovi sistemi in una mia classe per facilitarmi le operazioni sui db.

    La classe si connette di default a database SQL Server, per database differenti è sufficiente modificare la proprietà DataBaseType e inserire la ConnectionString adeguata, per il resto il codice rimane identico.

    Codice PHP:
    Private Sub MySQLTest()
     
    Dim mydb As ArtLabs.DataLayer.Provider
     mydb 
    = New ArtLabs.DataLayer.Provider

     mydb
    .DataBaseType ArtLabs.DataLayer.Support.ArtdbTypeEnum.MySQL
     mydb
    .DataConnectionString "Server=web-test;Port=3306;Database=fidiorders;Uid=root;Pwd=25101981;"
     
    mydb.Openconnection()

     
    DataGridView1.DataSource mydb.GetCursor("SELECT * FROM users")
     
    Label1.Text mydb.GetValue("SELECT UserName FROM users WHERE userID = 125")

     
    mydb.ExecuteStatement("Insert into users (username, password) values ('mario', 'rossi');")

     
    mydb.CloseConnection()
     
    mydb.Dispose()
     
    mydb Nothing
    End Sub 
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  4. #4
    non vedo perche' costringere una applicazione ad usare chiamate a funzioni diverse da quelle di ado.net (senza un buon motivo) legandola quindi a qualcosa che poi col tempo puo' metterti in difficolta' se devi cambiare o modificare sistema.
    Cmq, ripeto la domanda: come fai a passare i parametri?
    Saluti a tutti
    Riccardo

  5. #5
    Non devi costringere niente :P è una scelta, puoi decidere se usare ado.net a mano, e quindi riscrivere il codice relativo alla connessione, alla creazione dei vari oggetti e alla fine all'esecuzione di quello che effettivamente ti serviva, oppure puoi realizzarti una serie di routines che gestiscano le operazioni ricorrenti di ado e concentrarti solamente sul risultato che vuoi ottenere.

    L'ho usata in diversi progetti e l'ho testata per mesi e ti posso assicurare che non doversi preoccupare di creare 3 oggetti solo per la lettura di una tabella ogni volta che ne hai la necessità, semplifica e velocizza notevolmente il lavoro allo sviluppatore.

    Allo stesso modo ti posso assicurare che ha anche dei difetti ma nel tempo sono riuscito a renderla abbastanza snella da renderli minimali (almeno per quanto mi riguarda) e comunque ho chiesto un vostro parere proprio per migliorarla ulteriormente.

    Per rispondere alla tua domanda, nel post precedente ti ho inviato il codice e spiegato il funzionamento. L'unico parametro che devi cambiare per utilizzare un database diverso da SQL Server è la proprietà DataBaseType, che è un Enum e che quindi ti propone le scelte possibili.

    Se può essere utile ti invito a leggere questo articolo che ho scritto per presentarla e spiegarne brevemente il funzionamento.
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  6. #6
    Costringere in senso lato. Figurati se non capisco l'utilita' di avere una classe helper per velocizzare le operazioni ripetitive. Di solito io ne ho una che tutte le classi del mio data access layer ereditano usandone le funzioni e specializzandole se necessario. Altri invece usano ad esempio il ms data access application block e via cosi.
    Detto questo, ti richiedo: come fai a passare i parametri alla tua classe?
    Visto che si parla di accesso ai dati, se si parla di parametri non intendo la connection string che si e' visto come la assegni ma intendo i parametri contenuti nelle query sql
    es.
    tuocommand.parameters.add("@nome", sqldbtype.varchar).value = "mario"
    Saluti a tutti
    Riccardo

  7. #7
    Ok, non avevo capito la tua domanda.
    Uno dei limiti a cui mi riferivo nel post precedente è proprio questo, al momento non ho implementato un sistema per gestire query parametriche o stored procedures.

    Sto pensando di aggiungere un override al metodo GetCursor che accetti come parametro di ingresso un oggetto DBCommand invece che una stringa SQL. Un problema che ho al momento è quello di trovare un sistema per fra creare alla classe l'oggetto DBCommand appropriato per il tipo di database correntemente selezionato.
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  8. #8
    Originariamente inviato da simo
    ...trovare un sistema per fra creare alla classe l'oggetto DBCommand appropriato per il tipo di database correntemente selezionato.
    ado.net 2 come abbiamo detto permette gia di suo di astrarre dal db.
    Quindi se ti serve ritornare un command generico

    dbFactory = System.Data.Common.DbProviderFactories.GetFactory( "System.Data.ildbchetipiace")
    return dbFactory.CreateCommand

    e seguendo lo stesso esempio

    par = dbFactory.CreateParameter
    Saluti a tutti
    Riccardo

  9. #9
    Perfetto, hai capito esattamente cosa intendo e hai utilizzato esattamente le stesse istruzioni utilizzate da me per creare gli oggetti utilizzati dalla classe.

    Il problema però non è la creazione dell'oggetto Command (o qualsiasi altro oggetto) per un certo database, il "problema" attualmente per me è decidere come disegnare il processo logico della classe per manternerla semplice per l'utilizzatore.

    Per ottenere quello che proponi tu al momento sarebbe sufficiente rendere publico il metodo CreateDBObject, in realtà vorrei vedere se riesco a trovare un modo migliore per gestire la cosa.
    Visual Basic e Dintorni
    Blog sullo sviluppo Web in generale

  10. #10
    scusa ma... se la necessita' e' avere un command, il modo migliore per soddisfare la necessita' (che non sia quello di chiamare direttamente ado.net e chiederglielo) e' esporre una funzione simile a
    public Data.Common.DbCommand GetCommand() ....
    Saluti a tutti
    Riccardo

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 © 2026 vBulletin Solutions, Inc. All rights reserved.