2012-05-03 8 views
5

Ho un'applicazione C# .net che è stata distribuita separatamente a diversi client. Di tanto in tanto aggiungiamo alcune nuove funzionalità o correggiamo alcuni bug e spesso apportiamo modifiche nel DB. Uso l'approccio di clic una volta sulla distribuzione per aggiornare exe ai miei PC client. L'istanza del server SQL è stata installata sul proprio sistema.Esegui SQL Script con .net eseguibile

Voglio sapere come posso aggiornare il loro database sql con ogni aggiornamento exe.

Si prega di tenere presente che è possibile che un client stia lavorando alla versione 2 e non sia mai aggiornato alla versione 3 ma quando viene rilasciata la versione 4, quindi aggiorna l'applicazione. In tal caso ho bisogno di eseguire due script sul suo database. Uno per la versione 3 e l'altro per la versione attuale, che è 4.

Grazie

risposta

2

Supponendo che si disponga di una stored procedure/script in grado di aggiornare una versione a un'altra e, supponendo che non si possa caricare alcun altro exe che la eseguirà, perché non si include semplicemente una chiamata per eseguirla all'inizio della nuova versione? Ci sarà un controllo quando il software carica quello che guarda se sta usando la versione corretta del database, in caso contrario aggiornalo. Per gestire problemi come andare dalla versione 2 alla 4, basta assicurarsi che il database stesso tenga traccia della versione corrente.

+0

Quindi ho bisogno di mantenere tutti gli script del database nel mio eseguibile così ogni volta che l'utente aggiorna l'exe dovrebbe essere disponibile il rispettivo script. – MegaMind

+0

sì, è necessario aggiungere anche una versione flag nel database :) – ykatchou

0

Si potrebbe provare sqlcmd e basta chiamare l'exe da dentro di voi applicazione con gli aggiornamenti DB.

0

Questo è uno scenario che è meglio risolto utilizzando "Migrazioni del database". Ci sono diversi strumenti disponibili nell'ecosistema .net per aiutarti. Alcuni degli strumenti vengono forniti con un runner separato, mentre altri possono essere compilati come un .net assembly che puoi includere nel tuo progetto.

Esempi sono:

0

Ho creato due componenti per affrontare questo problema:

1.

A WinForms app che analizza un certo DB SQL, nonché di una cartella contenente i file SQL soluzione scruipt. Quindi memorizza i file di script sugli oggetti SQL e mi consente di creare un "Manifest.xml" contenente un ordine di esecuzione per i vari file di script.

I file di script per le tabelle contengono istruzioni per versione sull'aggiornamento della struttura della tabella.

Il builder copia quindi i file di script pertinenti insieme al manifest in una determinata posizione. Di solito copio quelli insieme alla mia app se non sono preoccupato di sovraffollare la mia cartella app. Altrimenti li comprimo in una 7-zip protetta da password.

2.

Una linea di comando app che decomprime (se necessario) ed esegue il manifesto. Il lavoro effettivo viene svolto in una libreria di classi separata che può essere integrata nelle mie app.

Quindi nella mia app ogni volta che eseguo la mia conversione> dbversion eseguo l'aggiornamento.

Nelle installazioni in cui è presente solo una installazione di staging e di produzione in un singolo cliente e in genere nessuna app in questione, userò l'app CLI autonoma manualmente. È un modo semplice per spingere gli aggiornamenti, specialmente se hai modificato 20 visualizzazioni e VERAMENTE non hai voglia di copiarli/incollarli tutti in SQL Mgt Studio: p