Laden...

Create Table aus Datatable, oder eine andere Lösung?

Erstellt von dott vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.986 Views
D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren
Create Table aus Datatable, oder eine andere Lösung?

sqlite

Hallo,
Ich lese aus einer Datenbanktabelle die Daten aus und speichere die in einer Datatable zb. DT1. Die clone ich zu DT2 und füge den Inhalt der DT1 hinzu. Danach lese ich ein Tabcontrol aus und speichere die Namen der Tabpages die noch nicht in der DT2 sind als Columns in die DT2.

Nun habe wil ich die DT2 in die Datenbank zurückschreiben und die ursprüngliche table in der Datenbank aktualisieren. Da sich in der DT2 mehr oder andere Spalten befinden als in der Tabelle der Datenbank, muss ich wohl eine neue Tabelle in der Datenbank erstellen und die alte löschen, oder gibt es noch eine andere Möglichkeit?

Wenn nicht, wie kann ich aus einer Datatable ein Create Table durchführen?

gruß
dott

F
115 Beiträge seit 2012
vor 10 Jahren

Hi,

wenn Du nur Spalten anfügen willst kannst Du das mit "alter table add column".

SQL: ALTER TABLE Statement

Vielleicht ist aber eine Datenbank für Dein Problem nicht ganz das Richtige? Evtl. ist eine XML-Datei flexibler?

Gruß
f_igy

P
660 Beiträge seit 2008
vor 10 Jahren

ich würde dir auch eher zu einer XML raten.

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

3.825 Beiträge seit 2006
vor 10 Jahren

Oder eine NoSQL-Datenbank ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

Welche Datenbank wäre denn dafür gut geeignt? muss eine embeded sein.

Ein Create table aus einer Datatable ist keine gute Lösung? oder unmöglich?

16.842 Beiträge seit 2008
vor 10 Jahren

Kommt drauf an, wie genau oder eng Du embedded definierst.* RavenDB (.NET) gibts wohl ein Embedded-Nuget-Paket, inwiefern das nicht Nicht-ASP-Anwendungen läuft weiß ich nicht

  • DBreeze is eine NoSQL-DB, die auf Embedded Anwendungen ausgelegt ist und sogar ACID unterstützt. Auf C# fokussiert.

Ich präferiere MongoDB. Läuft aber als eigenständige Anwendung und erfüllt somit nicht das klassische Embedded-Muster.

F
115 Beiträge seit 2012
vor 10 Jahren

Hi,

Datasets kann man total einfach nach XML Schreiben und auch Lesen.

Laden eines 'DataSet' aus XML (ADO.NET)

Wenn Du lediglich die Daten dauerhaft speichern willst, keine spezielle DB Funktionalität benötigst und keine riesigen Datenmengen hast würde ich daher XML nehmen. Kann man vor dem Speichern auch noch mit GZIP klein machen, falls die Dateigröße ein Problem darstellen sollte. Zudem bietet Linq ja auch einiges von dem, wozu man sonst gerne SQL verwendet.

Create Table aus einem Programm ist zumindest ungewöhnlich. In aller Regel benötigen klassische SQL-Datenbanken kostante Datenstrukturen für ein effizientes Arbeiten. Bei SQL-Lite sieht die Sache evtl. etwas anders aus, da der Optimizer dort sehr dynamisch zu arbeiten scheint. Mit No-SQL DBs kenne ich mich nicht aus, so weit ich weß sind die gut für große Datenmengen wenig oder nicht strukturierter Daten geeignet.

Gruß
f_igy

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

Um es vielleicht etwas verständlicher zu machen, erkläre ich mal warum das ganze.

Die Tabelle ist eine Berechtigungsmatrix um Tabpages gegenüber Rollen zu berechtigen.
Die Tabelle hat zwei feste Spalten, ID und Name, wobei unter Name der Rollenname gespeichert wird.

Jetzt soll wenn ich neue Tabs anlege um das Programm zu erweitern automatisch die Matrix erweitert werden ohne das ich die Datenbank manuell erweitern muss. Das gleiche soll auch mit der Berechtigungsabfrage im Code passieren.

Für jeden Tab wird die Tabelle um eine Spalte erweitert.

Ich wollte das eigentlich gerne mit einer Datenbank machen. Wie denkt ihr über das ganze vorhaben?

F
115 Beiträge seit 2012
vor 10 Jahren

Hi,

naja, eine Matrix scheint mir da nicht das Richtige. Normalerweise verknüpft man eine USER- und eine Rollen-Tabelle über eine Zwischentabelle zur auflösung der n:m-Beziehung (einer user kann mehrere Rollen, eine Rolle mehrere User haben).

Die meisten DB-System haben solche Berechtigungsystem. Falls Du ein eigenes Programmieren willst würde ich dringed zum Studium eigehender Literatur zum Thema Berechtigungsystem raten. So wie Du das planst ist das etnweder so genial, dass bisher noch niemand anderes drauf gekommen ist, oder aber die meisten haben das Kozept verworfen, weil es zu Problemen führt...

Gruß
f_igy

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

Hi,
die Matrix wäre schon genial um Rollen zu gewissen objekten zu berechtigen. Das Benutzer mehrere Rollen haben ist kein Problem, wird vorher schon abgefragt. Das kommt auch aus einer anderen Datenbank.

Ich denke ich werde aber die Tabelle ändern in:

Name, Tab, Berechtigt
Rolle1, Tab1, 1
Rolle1, Tab2, 1
Rolle2, Tab1, 0
Rolle2, Tab2, 1
geht das so überhaupt?

Vorher war es so:
Name, Tab1, Tab2
Rolle1, 1,1
Rolle2, 1,0

fand ich besser, aber da muss ich halt die columns erweitern.

F
115 Beiträge seit 2012
vor 10 Jahren

Hi,

das entspricht der Auflösungstabelle zwischen Rolle und Tabelle. Rechte können m.E. natürlich unterscheidlich sein (lesen, schreiben, löschen, ...). Ich fand grade dies:

Rollen sind keine Gruppen
Berechtigungssystem - Design korrekt ?

Gruß
f_igy

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

Sowie es aussieht brauche ich drei Tabellen, Rollen, Tabs und Berrechtigung.

Im Moment speichere ich die Tabelle mit dem sqlitecommandbuilder, das wird mit verknüpften tabellen nicht mehr funktionieren, oder?

D
dott Themenstarter:in
48 Beiträge seit 2013
vor 10 Jahren

Wenn auf eine sqlite datenbank mehrere Leute bei der Anmeldung lesend zugreifen, sollte das doch kein Problem sein, oder?

Es geht nur um die Anmeldung.

P
660 Beiträge seit 2008
vor 10 Jahren

Das gleichzetige lesen ist kein Problem, das schreiben hingegen wird nacheinander ausgeführt.

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"