59 messaggi dal 08 ottobre 2013
Ho un'applicazione che viene usata da diversi utenti, ma ogni utente deve accedere ad un database diverso.
Attualmente in fase di prova è Access, poi definitivamente sarà con ogni probabilità MySql.

La struttura di tutti i database è identica.

Ho i dati definiti in un dataset xsd, al cui interno sono presenti dei table adapter che fanno riferimento alla connection string definita in web.config.

Vorrei che a seconda dell'utente venisse usata una variante della connection string che punta al db corretto, senza necessariamente scardinare la struttura del dataset.

Purtroppo il database è esportato da un altro programma e non posso modificarne la struttura in modo da fare un database unico.

Ma non ho idea da che parte iniziare ad affrontare il problema :-(

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Roberto,
prova a seguire questo consiglio:
http://stackoverflow.com/questions/695491/best-way-to-set-strongly-typed-dataset-connection-string-at-runtime#answer-2919459

Si tratta di creare un nuovo costruttore per il table adapter, in modo che tu possa fornirgli l'oggetto connection che vuoi tu.

Fortunatamente il table adapter viene generato come classe partial, quindi potrai scrivere quel costruttore su un file di codice separato. Il vantaggio è che così non verrà sovrascritto neanche se Visual Studio dovesse rigenerare il table adapter.

ciao,
Moreno

Enjoy learning and just keep making
59 messaggi dal 08 ottobre 2013
Ciao,
scusa il ritardo ma non ho più lavorato a questo progetto e ho lasciato la cosa in stand by, non ho avuto modo di fare prove.

Ho letto il tuo esempio, ma mi pare di capire però che questo puoi usarlo se crei il table adapter da codice.
Io invece li creo con il designer dentro VS.

Secondo te è utilizzabile lo stesso metodo?

Grazie

Ciao
Roberto
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Roberto,

rrroberto ha scritto:

Secondo te è utilizzabile lo stesso metodo?

Certamente. Leggi la discussione per intero: l'utente che ha posto la domanda ha appunto creato il dataset usando il designer.

Anche in questo caso, infatti, nella tua soluzione verranno create delle classi. Dato che Visual Studio crea quelle classi come partial, potrai ridefinire quella stessa classe in un altro file e aggiungervi nuovi membri, come il costruttore del TableAdapter di cui abbiamo parlato.

ciao,
Moreno

Enjoy learning and just keep making
59 messaggi dal 08 ottobre 2013
Ciao e grazie di nuovo.

Scusa, mi ci perdo.

Diciamo che io ho un dataset MyDS con all'interno un table adapter MyTA

Se non ho capito male quindi devo fare qualcosa tipo:

namespace MyDSTableAdapters
 partial public class MyTA
  public sub new()
   //e qui andrà qualcosa tipo
   //me.connectionstring="quello che voglio"
  end sub
 end class
end namespace


ma se io faccio così, non mi riconosce nulla.
già il fatto che non funzioni l'autocomplete mi insospettisce...
ma poi per esempio se metto me. qualunque cosa, mi dice che non esiste nella classe mydstableadapters.

dove sbaglio?

quindi questo lo devo fare per ogni singolo table adapter giusto?

Altra domanda, o meglio altro approccio allo stesso problema:
Nella discussione che citi, si menziona la baseclass.
Io vedo che usa di default System.ComponentModel.Component

Premesso che non ho chiarissimo il concetto, non potrei impostargli lì una classe diversa?

Grazie
Ciao
Roberto
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Roberto,

rrroberto ha scritto:

Se non ho capito male quindi devo fare qualcosa tipo:

Sì, ci sei quasi. Penso che tu non abbia indicato l'esatto namespace (MyDSTableAdapters) e/o l'esatto nome di classe (MyTA).
Quella che stai definendo è una nuova classe; lo dimostra il fatto che l'intellisense non ti mostra tutti i membri quando digiti Me.

Inoltre avresti avuto anche un errore di compilazione, perché il costruttore di default, cioè quello senza parametri, è già stato definito da visual studio.

Cerca di capire qual è il giusto namespace e nome di classe da usare, poi crea un costruttore che accetti una SqlConnection, come vedi fare qui:
http://stackoverflow.com/questions/695491/best-way-to-set-strongly-typed-dataset-connection-string-at-runtime#answer-2919459

ciao,
Moreno

Enjoy learning and just keep making
59 messaggi dal 08 ottobre 2013
Io credo che ci sia qualcosa di sbagliato nel progetto in generale.

Vado leggermente offtopic ma credo che il problema sia collegato.

Se io creo un nuovo modulo con dentro una funzione, anche se metto sia modulo che funzione public, non riesco a chiamarla dagli altri file del progetto.

Mi fa pensare che ci sia qualche tipo di problema di namespaces in generale, possibile?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Roberto,


Mi fa pensare che ci sia qualche tipo di problema di namespaces in generale, possibile?

Non saprei, bisognerebbe esaminare il codice.
Comunque, dato un modulo dichiarato in questo modo all'interno di un file .vb situato dentro /App_Code (se il progetto è di tipo "Sito web")...
Imports Microsoft.VisualBasic

Namespace MiaApplicazione
    Public Module MioModulo
        Public Function Moltiplica(fattore1 As Integer, fattore2 As Integer) As Integer
            Return fattore1 * fattore2
        End Function
    End Module
End Namespace

...si può richiamare il suo metodo da un altro file .vb in questo modo:
Dim risultato = MiaApplicazione.MioModulo.Moltiplica(4, 5)


ciao

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.