[C#] Database Update Wizard

Pagina: 1
Acties:

  • OKA
  • Registratie: Juni 2005
  • Laatst online: 18:47
Ik ben bezig om een database update wizard te maken die gebruikt gaat worden om de database bij de klant te updaten (met aanpassingen tabellen, nieuwe/aangepaste views/stored procedures, etc.).

Het grote gedeelte is nagenoeg klaar, echter op het belangrijkste punt zit ik een beetje vast, namelijk het uitvoeren van de update-scripts.

Ik voer een sql-script uit op de database, die een int teruggeeft met het huidige database-versienummer.
Nu wil ik aan de hand van dit versienummer bepalen welke scripts uitgevoerd moeten gaan worden. Hiervoor heb ik alvast de mogelijke versienummers in een een array gezet:
C#:
1
int[] PossibleUpdates = new int[] { 250, 260, 300, 310, 320, 330, 340 };

Stel dat de huidige versie 300 is, dan moet ik dus het script voor 310, 320, 330 en 340 uitvoeren. De scripts open ik via een StreamReader, dus de scripts zitten als Resource in de exe:
C#:
1
2
3
4
5
6
7
8
public static string GetResource(string resourceName)
{
     Assembly asm = Assembly.GetExecutingAssembly();
     TextReader textReader = new StreamReader(asm.GetManifestResourceStream(resourceName));
     string result = textReader.ReadToEnd();
     textReader.Close();
     return result;
}
Het script open ik als string als volgt:
C#:
1
GetResource("<namespace>.<folder>.<scriptfile.sql>");


Nu is het ook nog eens zo, dat het script GO-separators bevat, dus moet ik de string met het script in stukken hakken, omdat ADO dan anders moeilijk gaat doen:
C#:
1
2
3
4
5
6
7
8
9
string query = GetResource("<namespace>.<folder>.<scriptfile.sql>");
Regex regex = new Regex(@"^\s*GO\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline);
string[] cmds = regex.Split(query);

foreach (string line in cmds)
{
     if (line.Length > 0)
{
     // query uitvoeren


Hoe kan ik dit het beste aanpakken?
Ik heb al geprobeerd om met Arrays en Arraylists te gaan werken, maar kom er niet uit.

Ik heb dus al een Array met de mogelijk update-versienummers. Ik zou dan een 2e Array moeten hebben die de versienummers bevat waarnaartoe geüpdate kan worden. Vervolgens een 3e Array die de bijbehorende scripts bevat en als laatste een 4e Array waarin de scripts zijn opgedeeld in batches.

Dit lijkt mij een beetje te veel. Wie kan mij de juiste richting/methode/.... wijzen?

  • degroot
  • Registratie: December 2003
  • Niet online
Bedoel je zoiets als multidimensionale array's?

Misschien is een DataSet gebruiken misschien een oplossing voor je ?

www.degroot-it.nl


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 20:46
Zet wat elementen in een struct (met db versie, sql statement), plaats deze in een generic dictionary class en zoek ze naderhand op.