Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338

    [.NET c# SQLServer] connessioni dinamiche ai dati

    Mi sono trovato a riscrivere il db (SQL Server 2005) che uso per una applicazione winform in c#, ovviamente mantenendo quello vecchio SS e creandone uno Nuovo SSNew, dove ho anche aggiunto tabelle, viste, ecc. e rinominato alcuni oggetti.

    Devo quindi sistemare il codice (uso VS2005) dove in alcuni casi ho:
    - creato un dataset che utilizzo nelle form per la compilazione di comboBox ad esempio
    - usato connessioni dirette al db con comandi sql per ricavare i dati per le dataGridView

    Ora sto pensando che sarebbe moolto bello disporre le cose in modo da poter runtime scegliere a quale db connettermi così da disporre di dati di test, ecc. in modo veloce.

    Quali metodi sono raccomandabili / semplici / efficaci secondo voi?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    L'uso delle interfacce implementate dalle classi ADO.NET può essere utile (IDbConnection, IDbCommand, ...), anche se non sempre è sufficiente poiché le singole classi reagiscono differentemente alle query, ai tipi di parametri, ad elementi specifici del linguaggio.

    L'ideale sarebbe avere una libreria per l'accesso ai dati, basata su ADO.NET, ma generica e in grado di collegarsi in modo indipendente a diversi DB tramite un driver specifico, come avviene nel caso di BDP (Borland Data Provider), la libreria per l'accesso ai dati fornita con Delphi.NET.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    158
    sinceramente non ho capito la risposta di alka...

    Dipende su che filosofia hai incentrato lo sviluppo(ma da quello che ho capito dal tuo post non hai una filosofia, quindi la vedo dura).

    Se per esempio il tuo prog funzionasse con un'unica connessione globale a cui tutte le chiamate fanno riferimento, potresti implementare con 3 righe di codice una form che ti permette di cambiare la stringa di connessione e, tramite un tasto connect, distrugga l'oggetto globale oledbconnection e lo ricrei con la nuova stringa specificata.

    Altrimenti puoi utilizzare n chiavi di registro per salvare n stringhe di connessione e poi sceglerle da programma...

    Certo che, se nel codice hai aperto decine di connessioni con la stringa hardcodata ti toccherà in ogni caso fare un bel lavoro di find & replace.
    DISCLAIMER
    quello che sta scritto qui sopra è dettato esclusivamente dall'intuito, non da specifiche conoscenze tecniche. Usate queste informazioni a vostro rischio e pericolo (anhe sui server di produzione

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    mmm, una filosofia ce l'ho: questo è il secondo lavoro in .net e quindi provo diverse soluzioni per farmi un po'di esperienza

    la risposta di alka è forse fuori dalle mie possibilità ora..

    in sostanza ho una stringa di connessione che compare 2 volte, indipendentemente dal numero di connessioni (basta chiamare sempre la stessa, no?) anche perchè nn mi interessa cambiare il tutto in corso d'opera ma basta un settaggio generale, perciò in effetti pensavo di:
    - preparare una lista di connessioni modificabile da utente e salvarle come preferenze (devo ancora capire come)
    -> quando mi collego "al volo" mi basterà usare la stringa di connessione opportuna, ma mi rimane un dubbio per i controlli che usano il dataset, visto che fa riferimento ad una connectionstring interna che nn so come modificare da codice (ma solo in modo visuale)

    can you help me about?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Sì, in effetti rileggendo la mia stessa risposta l'ho trovata un po' confusionaria.

    Brevemente, lo scopo è quello di poter creare un'applicazione in grado di collegarsi a database differenti, giusto?

    Supponendo di non volersi fossilizzare su tecnologie fisse e specifiche, come OLE DB oppure ODBC, per le quali esistono famiglie di classi ADO.NET nella libreria base del framework (OleDbConnection, OleDbCommand, ..., OdbcConnection, OdbcCommand, ...), l'unico modo di poter implementare questo tipo di approccio è quello di usare le classi o le interfacce disponibili nel framework che siano il più generiche o specifiche.

    Ad esempio, tutte le classi dei provider ADO.NET per l'accesso a ODBC, OLE DB, SQL Server, ecc. che effettuano una connessione implementano IDbConnection: usando questa interfaccia come tipo per le variabili, è possibile assegnare ad essa qualsiasi riferimento a oggetti che costituiscono tipi diversi di connessione a database. E' più chiaro?

    L'unico problema è che non sempre è possibile gestire in modo così generalizzato e trasparente codice in grado di funzionare con tutti i database, poiché determinate "scritture" (es. query SQL, sintassi, ecc.) cambiano a seconda della base dati utilizzata o della piattaforma di accesso ai dati, quindi indipendentemente dal fatto che si usano tipi generici per rappresentare gli oggetti di manipolazione del database (connessioni, comandi, ecc.), spesso è comunque necessario inserire delle diversificazioni, ad esempio usando query SQL differenti per ciascun database supportato.

    Se lo scopo è un altro o se il "succo del discorso" non è chiaro, fatemi sapere.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    finalmente ho avuto il tempo di ritornare sull'argomento

    x alka: purtroppo non riesco a seguire del tutto il tuo discorso, ma forse le mie esigenze si possono accontentare di una soluzione meno generale ma più semplice da implementare..

    riassumo il mio ragionamento:
    - necessità: poter modificare la connessione a questo o quel database senza mettere mano a codice, ecc. (cioè runtime, poi vedremo dove memorizzare le stringhe di connessione più avanti); tenete presente che i vari db sono strutturalmente uguali e girano su stessa tecnologia SQLServer 2005

    - strada pensata: ci sono nel progetto 2 punti dove lavorare, cioè
    -- una stringa di connessione usata per conn. dinamiche, riempimento di datagridview in base alle scelte dell'utente, ecc. che in quanto già memorizzata in una variabile globale non mi da nessun tipo di problema
    -- un dataset con relativi datatable che puntano al db tramite una connectionstring interna al progetto: ==> questa mi da problemi perchè io voglio modificarla dinamicamente, oppure va bene lo stesso inizializzarla all'avvio con la stessa variabile globale
    come faccio?

    stavo pensando di intervenire su
    codice:
    global::SorveglianzaSanitaria.Properties.Settings.Default.SorveglianzaSanitariaNewConnectionString
    ma per farlo devo poterci scrivere e ora come ora nn posso farlo perchè nel file Settings.Designer.cs esiste solo il metodo get..
    devo modificare questo file? si può?

    grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    so che ci siete!

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    x ora sono riuscito a leggere la connectionstring del file app.config, quindi volendo potrei caricare nella variabile globale il suo contenuto, ma così facendo non risolvo il problema di renderla custom, a meno che il file app.config non sia disponibile nella pubblicazione?

    voi modificate mai le impostazioni di app.config runtime?
    sapete come scriverle, visto che la connectionstring seguente è read-only?

    codice:
    str = ConfigurationManager.ConnectionStrings["SorveglianzaSanitaria.Properties.Settings.SorveglianzaSanitariaNewConnectionString"].ConnectionString;

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    Se usi Ado.Net 2.0 e quindi VStudio 2005 ci sono le factory classes per scrivere codice indipendente dal provider.

    Al seguente link puoi scaricare una classe pronta per tale scopo.
    http://www.binaryintellect.net/produ...px?productid=1
    Ans.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    338
    grazie, ci darò sicuramente una occhiata

    però dalle features mi sembra più orientata a garantire l'accesso a database di tipo diverso (tu stesso parli di provider)

    a me serve impostare in modo user friendly un accesso a db esattamente allineati strutturalmente e tutti sql server 2005 ma con dati diversi, tu 6 riuscito a fare qualcosa del genere?

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.