Datenbankerweiterung

Also folgendes Problem:

Ich habe ein Programm geschrieben, das mit Datenbanken arbeitet (Microsoft SQL Server). Jetzt bringe ich ein Update meines Programmes raus und es müssten neue Felder in bestehende Tabellen angelegt werden bzw. ganz neue Tabellen erstellt werden.

Wie löst man so etwas am besten?

Eine Datei erstellen mit den fehlenden Tabellen und Felder, Datei beim Start des Programmes öffnen Felder erstellen und Datei löschen? Oder hat irgendjemand bessere Ideen? Gibts da was fertiges von Microsoft oder von .NET?


Wäre super wenn da einer ne Idee hätte.

Gruß aafreak

PS: Ich programmiere in VB.NET.
 
ich versteh die frage nicht ganz, möchtest du jetzt wissen wie man die datenstruktur updatet?
wenn ja:
alter table und create table.
das ganze pakt man dann in nen programm lässt es beim setup ausführen, fertig!
 
Notfalls könntest Du auch eine extra Batch - Datei "dazu legen", dann wird darüber die DB erweitert. Desweiteren schließe ich mich meinem Vorredner an, CREATE und ALTER TABLE lösen das Problem am besten, falls Du Spalten ändern musst, wäre UPDATE eine Variante.

Grüße

Zephyros
 
Ok also das wie ich mit SQL Tabellen uns Spalten anlege und so weiter weiß ich.

Es gibt bei .Net System.Data.Common.DbConnection.GetSchema() um Tabellen und Felder die bestehen abzufragen. Wenn ich jetzt zum Update eine Datei mitgeben würde, in der die neuen Felder und Tabellen aufgelistet sind, dann könnte ich beim ersten Start meiner Anwendung nach dieser Datei suchen und die neuen Felder anlegen.

Ich dachte vielleicht hätte jemand eine bessere Idee. Vielleicht gibts ja vom Microsoft SQL Server etwas um das besser zu lösen. Wenn ich einfach die Metadaten meiner Tabellen in einer Datei exportieren könnte und diese dann automatisch beim Kunden ausführen. Das Problem ist es sollen ja nur die Felder und Tabellen angelegt werden die bei ihm noch nicht existieren.

Ich hoffe das ist jetzt ein bisschen verständlicher.


Code:
Meine DB:
Tabelle1 (ID, Bezeichnung...)
Tabelle2 (Artikelnummer, Bezeichnung1, Bezeichnung2, Mengeneinheit...)
Tabelle3 (aaa, bbb, ccc)

Kunden DB:
Tabelle1 (ID, Bezeichnung...)
Tabelle2 (Artikelnummer, Bezeichnung1, Mengeneinheit) <-- Hier soll Bezeichnung2 angelegt werden.
<-Tabelle3 mit allen Felder anlegen.
 
weiß nicht, ob es MySQL-spezifisch ist, oder auch bei MS SQL geht... aber für MySQL gibt es
Code:
CREATE TABLE IF NOT EXISTS `tablename` (%field-info%) ENGINE = ...

kannst ja mal in der MS-SQL-Doku (hoffe, sowas gibt's?! Oder is das irgendwo in der MSDN zu finden?) nachschauen...

ob es zum Hinzufügen einzelner Felder (ALTER TABLE `tablename` ADD ...) auch so eine Klausel gibt, ist mir nicht bekannt (hab ich auch noch nie danach gesucht...)

im Zweifeltfall einfach versuchen, das Feld zu erzeugen und entweder es klappt, oder es wird dir ein Fehler ausgespuckt, an dem du herausfinden kannst, ob das Feld schon existiert, oder ob es anderweilige Gründe gab, warum der Versuch schief ging....
 
Original von AaFreak
Wenn ich jetzt zum Update eine Datei mitgeben würde, in der die neuen Felder und Tabellen aufgelistet sind, dann könnte ich beim ersten Start meiner Anwendung nach dieser Datei suchen und die neuen Felder anlegen.

Normalerweise gehört sowas ins setup und nicht ins programm selbst. um die sql-geschichten wirst du dich schwer drücken können, ich kenne zumindest keinen weg sowas zu exportieren, bin aber auch kein db-spezialist. In java hab ich db's meist über ORM (Hibernate) gefüttert, vielleicht gibt's da bei .NET auch was derartiges.
 
Im 3.5 Framework gibt es LINQ da kann man auch sehr schön auf Datenbanken zugreifen.
Ist allerdings jetzt erst mit dem SP1 mit dazugekommen.
 
Zurück
Oben