Datenbank Import Export mit C#



  • Hallo zusammen.

    Die Daten meiner Applikation sind in einer Datenbank (SQL Server 2005) gespeichert. Den Zugriff mache ich mit Entity Framework 6.

    Nun benötige ich Export und Importfunktionen in meiner Applikation
    Die zu exportierenden Daten sollen in der Applikation ausgewählt und in eine Datei exportiert werden können.

    Gleichermassen sollen die Daten auch wieder importiert werden können.

    Momentan suche ich einfach Ansätze wie ich das lössen kann.

    Dateiformat.
    Idee: SQL Insertscripts: dann kann man die Daten auch wenn die Applikation nicht läuft so in die Datenbank importieren.

    Beim Import (übder die Applikation) möchte ich halt kontrollieren ob die Daten die eingefügt werden können gültig sind. Wenn z.B. Referenzen zu Daten aus anderen Tabellen fehlen:
    Meldung mit Lösungsvorschlag

    Wie erzeuge ich die Insertscripts. LinqToSql. Oder gibts das was vom EF. Oder ganz anders.

    Oder doch ein anderes Dateiformat. Habt ihr mir Ideen.



  • SQL Management Studio

    - Rechtsclick auf die Datenbank
    - Scripte erzeugen auswählen
    - Tabellen auswählen
    - In Advanced Options "Daten" auswählen, sonst wird nur das Schema exportiert.
    - Fertig.



  • ?? was hat das mit c# zu tun.

    Ich möchte nicht die ganze Datenbank exportieren. Und ebenfalls möchte ich nicht dass der User das SQL Management Studio öffnen muss.



  • Ich würde einfach programmintern ein DataSet dafür verwenden, denn mit diesem kannst du einfach XML-Dateien lesen und schreiben und ebenso mit der Datenbank die Daten abgleichen.

    Von SQL-Skripts würde ich abraten, denn damit vermischst du ja Daten und Datenbank-Struktur (d.h. wenn sich diese ändert, müsstest du auch aufwendig die Skripte anpassen). SQL-Skripte (mit Insert-Anweisungen) machen nur für das initiale Aufsetzen einer DB Sinn.



  • Hallo Th69 und Danke für dein Beitrag.

    SQL-Skripte (mit Insert-Anweisungen) machen nur für das initiale Aufsetzen einer DB Sinn.

    Das mache ich bisher auch so. Ich verwende einen Installer der unter anderem auch InsertScripte ausführt um die Datenbanktabellen initial zu füllen.

    Die Applikation wird bei uns Hausintern an verschiedenen Maschinen genutzt, jede Maschine hat seine eigene DB. Sollte nun ein Servicetechniker an der Maschine eine neue Einstellungen vornehmen müssen, folglich Daten einfügen in die Datenbank, wäre es praktisch, sollte die Einstellung in den Standard, übernommen werden, wenn er die vorgenommenen Einstellungen einfach per Knopf exportieren und die Entwickler diese Einstellungen wieder in den Installer mit einfliessen lassen könnte. Also wieder zu den Insertscripts hinzufügen könnte.

    Darum unter anderem meine Überlegung mit den Insertscripts.



  • Weiß nun nicht weiter!



  • scheint als wäre man hier verloren.



  • Scheint eher, als das du mit den Antworten nicht zufrieden bist.

    SQL Skripte sind keine Aufgabe von einer Programmiersprache, sondern der Datenbank. Die DB-Services kannst du aber auch programmiertechnisch ansteuern. Wenn du die Daten aber überprüfen willst, musst du wohl händisch vorgehen, und dann eignen sich andere Formate besser (Die man selbst erzeugt/liest).



  • Also InsertScripte benötige ich auf jeden Fall. Um Scripte zu erhalten die mein Installer ausführen kann.

    Gibt es schon irgendwelche Klassen, oder irgendwelche Ansätze im Netz die mir aus einer Entität ein Inserscript generieren.

    Bei Codeprojekt habe ich eine Lösung gefunden. Hier wird das ganze über Dataset gemacht.

    Da ich aber EntityFramework verwende müsste ich zunächst ein Dataset erzeugen. Ist etwas umständlich. Oder?



  • Scheint eher, als das du mit den Antworten nicht zufrieden bist

    Antworten??

    Es ware nur eine Antwort dabei. Das mit dem Dataset.
    Und dazu habe ich meine Bedenken vorgetragen.



  • Um die Disskusion nochmals anzuregen.

    Um Daten von einer Datenbank zu anderen zu bringen und um auch ein Format zu haben dass ich für einen Installer verwenden kann, habe ich noch nach weiteren Möglichkeiten umgeschaut.

    Eine schöne Möglichkeit wäre das ExcelFormat. Das SQL Management Studio bietet mir ja schon die Möglichkeit, Daten nach Excel zu exportieren und ebenfalls von dort wieder zu importieren.

    Vorteile mann kann die exportierten Daten zusätlich übersichtlich anschauen.

    Möglichkeiten den Import/Export mit c# auszuführen gibt es sicher.

    Was ich noch nicht gefunden habe: Diese Daten aus dem Excelfile über einen Installer (wir verwenden nsis) initial in die Datenbank zu importieren.

    Kennt jemand da eine Möglichkeit?

    Oder gibt es Gründe die gegen Excelfiles sprechen?



  • menschjunge schrieb:

    Eine schöne Möglichkeit wäre das ExcelFormat.

    "Schön" ist für dich, wenn der Installer nur funktioniert, wenn eine kostenpflichtige Software installiert ist?

    menschjunge schrieb:

    Vorteile mann kann die exportierten Daten zusätlich übersichtlich anschauen.

    Wozu?



  • menschjunge schrieb:

    Eine schöne Möglichkeit wäre das ExcelFormat.

    Ich hoffe du meinst csv und nicht Excel. Und ja, das ist eine Möglichkeit (Auch hier müsstest du für C# aber händisch eine Lösung schreiben, und ich gebe dir den Tipp dich vorher über das csv-Format kundig zu machen (Es gibt ein paar Sonderfälle die man Berücksichtigen muss, u.a. wie man mit Hochkommata und Zeilenumbrüchen in Texten zurecht kommt (Habe selbst einen konfigurierbaren CSV-Import/Export für ein C++ Programm geschrieben).

    menschjunge schrieb:

    Vorteile mann kann die exportierten Daten zusätlich übersichtlich anschauen.

    Umso lesbarer ein Format ist, umso höher ist meist der Parse-Aufwand für den Rechner.

    menschjunge schrieb:

    Was ich noch nicht gefunden habe: Diese Daten aus dem Excelfile über einen Installer (wir verwenden nsis) initial in die Datenbank zu importieren.

    Kennt jemand da eine Möglichkeit?

    Ja, händisch schreiben. Sofern das Exportformat von dir vorgegeben ist, müsste es ohnehin recht einfach sein (Reihenfolge der Felder oder Benennung der Titel in der ersten Zeile). Spannend wird es Abhängigkeiten zwischen Datensätzen, Autowerten usw. (viel Spaß beim Schreiben xD).

    menschjunge schrieb:

    Oder gibt es Gründe die gegen Excelfiles sprechen?

    Gegen Excel: Sehr viel, gegen csv nur der Aufwand es selbst schreiben zu müssen (Ansonsten kannst du auch gleich SQL-Skripte aus dem Management Studio erzeugen und diese ebenso wieder importieren; Da hast du auch die Abhängigkeiten usw. gewährleistet).



  • "Schön" ist für dich, wenn der Installer nur funktioniert, wenn eine kostenpflichtige Software installiert ist?

    Der Installer funktioniert auch ohne Excel. Nur anschauen der Datei ohne Excel wäre ohne weiteres nicht möglich. Da hast du recht. Da die Software aber nur bei uns in der Firma eingesetzt wird und auf jedem Entwicklerrechner Excel vorhanden ist, also dort wo die Daten erstellt werden, wäre das nicht so problematisch.

    Wozu?

    Hierzu muss man vieleicht zunächst sagen, dass die Tabelle keine Tausende Datensätze enthält. Es ist eine Konfigurationsdatenbank, die für eine Maschine
    Konfigurationsparmeter enthält die über ein c# projekt verwaltet werden.

    Die Konfigurationsparmeter werden nun für einen Maschinentyp beim Bau einmal festgelegt. Diese Daten werden dann über einen Installer an der Maschine eingespielt.

    Entdeckt man nun kleine Fehler in den Konfigurationsdaten (z.B. Rechtschreibfehler in strings) ist es ja bequem kurz die Exceldatei zu öffnen hier Änderungen vorzunehmen.



  • nein ich meinte nicht csv. ich meinte xls.
    aber gut die Nachteile überwiegen dann doch.

    Insertscripte sind glaube ich doch die bessere Wahl.
    Leider weiß ich nun immer noch nicht ob es schon etwas fertiges gibt diese über das Entity Framework zu generieren.

    Irgendwas generisches für alle Entitys wird schwer. Die Entitys haben keine Basisklasse.

    Eine Iteration über alle Properties um daraus die Spaltennamen zu generieren ist auch nicht richtig toll.


Log in to reply