Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Datenbank in txt.Datei exportieren

Empfohlene Antworten

Veröffentlicht

Hi,

ich hab da ne Frage, und zwar wollte ich bzw. will ich Datensätze meiner SQL Datenbank in VS 2010 exportieren in eine txt.Datei - nach bestimmten Vorgaben ( ich meine damit : alle Zeilen in der txt.Datei müssen den selben Abstand haben, weil beim Importieren ich von Zeilen ausgehe -> also ab Stelle 0-20 ist die Bezeichnung -> ab 20-22 ist das Kürzel usw. ) und genau das will ich programmieren.

Ich habs schon soweit das ich mit dem StreamWriter eine txt.Datei erstelle und dort die Bezeichnung + Kürzel reinschreiben kann. Nur das mit den Abständen kriege ich nicht hin. Denn wenn ich das so mache :

zeile = gruppe.BEZEICHNUNG+ "       " + gruppe.KUERZEL;

Dann ist das ungenau, denn die Bezeichnungen sind verschieden lang, so kann ein Kürzel von der Stelle 20 beginnen oder auch 25 usw.

Beispiel:

PC und Zubehör AA

Schrank AG

Hey super! Danke ;)

Ich habe noch eine Frage, ich holle mir jetzt die Datensätze über eine Linq Anweisung ( IQueryable ) .... dann schreibe ich sowas wie :

foreach (DtoGruppe gruppe in qGruppe)

{

 zeile = string.Format("{0,-3}{1,-70}", gruppe.KUERZEL, gruppe.BEZEICHNUNG);

}
Doch ich habe auch zu einzelnen Gruppen, sogenannte Gruppenfelder. Letzendlich sollte es so aussehen:
AAPC und Zubehör AAAMonitor AAPC und Zubehör AABFestplatte AAPC und Zubehör AACHauptspeicher AAPC und Zubehör AADLaufwerk 1 AAPC und Zubehör AAELaufwerk 2
Vorne sind Kürzel + Bezeichnung <- habe ich jetzt auch genau so ;) Danke sehr nochmal .... und jetzt fehlen halt die Gruppenfelder. Abstand kriege ich hin, aber wie holle ich sie mir aus der DB ? Wenn ich in die foreach der Gruppe noch eine foreach der Gruppenfelder einbaue, sieht es erstmal so aus :
       foreach (DtoGruppe gruppe in abfrageGruppe)

            {

               foreach (DtoGruppenFeld gruppenFeld in abfrageGruppenfeld)

               {

                  // befüllen der txt.Datei

                  //zeile = String.Format("bezeichnung = {0}, kuerzel = {1:hh}", gruppe.BEZEICHNUNG + gruppe.KUERZEL);

                  zeile = string.Format("{0,-3}{1,-70}{2,-3}{4,-70}", gruppe.KUERZEL, gruppe.BEZEICHNUNG, gruppenFeld.KUERZEL, gruppenFeld.BEZEICHNUNG );


                  writer.WriteLine(zeile);

               }

            }

Und ich bekomme diese Fehlermeldung :

Der Index, basierend auf 0 (null), muss größer als oder gleich Null sein, und kleiner als die Größe der Argumentenliste.

Okey, mein Fehler.

 zeile = string.Format("{0,-2}{1,-70}{2,-2}{4,-70}", gruppe.KUERZEL, gruppe.BEZEICHNUNG, gruppenFeld.KUERZEL, gruppenFeld.BEZEICHNUNG );

Hätte anstatt der 4, eine 3 hinschreiben sollen - jetzt funktionierts jedenfalls fast ^^

Jetzt wird die Textdatei sehr sehr lang, sollte eig. so aussehen :

AAPC und Zubehör AAAMonitor

AAPC und Zubehör AABFestplatte

AAPC und Zubehör AACHauptspeicher

AAPC und Zubehör AADLaufwerk 1

AAPC und Zubehör AAELaufwerk 2

AAPC und Zubehör AAFSchnittstelle 1

AAPC und Zubehör AAGSchnittstelle 2

AAPC und Zubehör AAHDruckerfabrikat

ABStuhl ABAArt des Stuhl

ABStuhl ABBMaterial

ABStuhl ABCFarbe

ABStuhl ABDArmlehne (J/N)

Bei mir siehts so aus :

AAPC und Zubehör AAAMonitor

AAPC und Zubehör AABFestplatte

AAPC und Zubehör AACHauptspeicher

AAPC und Zubehör AGDSchließmechanismus

AAPC und Zubehör AADLaufwerk 1

AAPC und Zubehör AAELaufwerk 2

AAPC und Zubehör AAFSchnittstelle 1

AAPC und Zubehör AAGSchnittstelle 2

AAPC und Zubehör AAHDruckerfabrikat

AAPC und Zubehör ABAArt des Stuhl

AAPC und Zubehör ABBMaterial

AAPC und Zubehör ABCFarbe

AAPC und Zubehör ABDArmlehne (J/N)

Also, irgendwie muss ich das so hinbekommen, dass nur die Gruppenfelder der einzelnen Gruppe hinzugefügt werden, irgendwie nach dem Kürzel prüfen o.ä ?

Weil die Gruppenfelder beginnen ja alle mit AA oder AB je nach der Gruppe wo sie dazugehörren ...

Hey super ;) Bin noch ein Anfänger, von daher sorry ^^ Aber du hilfst mir wirklich wunderbar ...

Jetzt habe ich folgenden Code der auch so super funktioniert :

            foreach (DtoGruppe gruppe in abfrageGruppe)

            {

                IQueryable<DtoGruppenFeld> abfrageGruppenfeld = from gruppenFeld in dmc.DbGruppenFelder

                                                         where gruppenFeld.KUERZEL.Substring(0,2) == gruppe.KUERZEL

                                                         select gruppenFeld;


               foreach (DtoGruppenFeld gruppenFeld in abfrageGruppenfeld)

               {

                  // befüllen der txt.Datei

                  zeile = string.Format("{0,-2}{1,-70}{2,-2}{3,-70}", gruppe.KUERZEL, gruppe.BEZEICHNUNG, gruppenFeld.KUERZEL, gruppenFeld.BEZEICHNUNG );


                  writer.WriteLine(zeile);

               }

            }

Wenn da aber nicht doch ein "kleiner" Fehler wäre -> mit dem Code fallen leider die paar ( sind sehr wenige ) Gruppen weg die eben KEIN Gruppenfeld haben. Nur habe ich bisher nie eine if Bedingung o.ä in eine foreach geschrieben ... bin grad am überlegen wie ich das noch dazubauen kann.

mit dem Code fallen leider die paar ( sind sehr wenige ) Gruppen weg die eben KEIN Gruppenfeld haben.
Welcher Text soll für diese Gruppen denn in der Datei stehen? Sollen die Spalten für die Gruppenfelder einfach leer bleiben?

Du kannst das übrigens auch mit einer einzigen Abfrage machen. Stichwort JOIN.

Jap es bleibt dann einfach leer.

Beispiel:

AJRecorder/Videogeräte

AKRollos/Verschattungen

ALSchulbedarf

Und bei mir fallen jetzt z.B.AJRecorder und AKRollos weg.

Join sagt mir garnix, ehrlich gesagt.

Join sagt mir garnix, ehrlich gesagt.
Joins sind ein elementarer Bestandteil von SQL. Damit kannst du Abfragen über mehrere Tabellen machen. Dein Problem mit den Gruppen ohne Gruppenfelder ließe sich damit auch ganz einfach lösen.

Zeig doch mal, wie deine beiden Abfragen jetzt aussehen.

Jop, habe bisher nie Join Abfragen gelernt bzw. gebraucht.

Momentan siehts so aus :

      StreamWriter writer;

         string zeile;


         // Datensätze aus DB hollen

         DatenContainer dmc = new DatenContainer();

         IQueryable<DtoGruppe> abfrageGruppe = from gruppen in dmc.DbGruppen

                                               select gruppen;

         // erstellen der txt.Datei

         writer = File.CreateText(pfad);


            foreach (DtoGruppe gruppe in abfrageGruppe)

            {

                IQueryable<DtoGruppenFeld> abfrageGruppenfeld = from gruppenFeld in dmc.DbGruppenFelder

                                                         where gruppenFeld.KUERZEL.Substring(0,2) == gruppe.KUERZEL

                                                         select gruppenFeld;


               foreach (DtoGruppenFeld gruppenFeld in abfrageGruppenfeld)

               {

                  // befüllen der txt.Datei

                  zeile = string.Format("{0,-2}{1,-70}{2,-2}{3,-70}", gruppe.KUERZEL, gruppe.BEZEICHNUNG, gruppenFeld.KUERZEL, gruppenFeld.BEZEICHNUNG );


                  writer.WriteLine(zeile);

               }

            }

Ich hab mir das mit Join angeschaut, aber ich wills trotzdem erstmal mit LINQ versuchen.

Irgendwie muss ich doch der Abfrage sagen, dass ich auch die Gruppen will die eben nicht gleich dem Kürzel der Gruppenfelder sind. Also auch die Gruppen die KEIN Gruppenfeld haben bzw. wo Gruppenfeld null ist.

Ich hab mir das mit Join angeschaut, aber ich wills trotzdem erstmal mit LINQ versuchen.
Das widerspricht sich nicht. Man kann JOINS mit LINQ machen, nur weiß ich nicht, wie das geht, weil ich noch nie LINQ benutzt habe.

Irgendwie muss ich doch der Abfrage sagen, dass ich auch die Gruppen will die eben nicht gleich dem Kürzel der Gruppenfelder sind. Also auch die Gruppen die KEIN Gruppenfeld haben bzw. wo Gruppenfeld null ist.

Du bekommst diese Gruppen ja auch in der äußeren Abfrage. Aber die innere Abfrage liefert für diese Gruppen keine Ergebnisse, und erzeugt daher auch keine Ausgabe.

Du bekommst diese Gruppen ja auch in der äußeren Abfrage. Aber die innere Abfrage liefert für diese Gruppen keine Ergebnisse, und erzeugt daher auch keine Ausgabe.

Jop stimmt, aber wie löse ich das ?

Das ist jetzt nicht besonders sauber, aber du könntest dir über eine bool-Variable merken, ob du für eine Gruppe eine Gruppenfeld-Ausgabe gemacht hast.

Falls du nach der inneren Schleife feststellst, dass das für die aktuelle Gruppe nicht geschehen ist, kannst du eine Ausgabe ohne Gruppenfeld hinterherschieben.

Kapier ich jetzt nicht ganz, aber ich könnte doch auch mir die Gruppen merken - in einer Liste oder so - und dann nochmals prüfen gegen die Liste, und wenn die Gruppe nicht in der Liste dann hinschreiben ?

Okey, ich habe jetzt 2 Listen.

1.Liste hat alle Gruppen die reingeschrieben wurden.

2.Liste hat alle Gruppen.

Jetzt will ich folgendes machen : Für jedes Element welches in Liste 2 ist aber nicht in Liste 1 soll etwas getan werden.

Wie schreibe ich das als Code?

Das ist meiner Meinung nach viel zu kompliziert.

            foreach (DtoGruppe gruppe in abfrageGruppe)
{
IQueryable<DtoGruppenFeld> abfrageGruppenfeld = from gruppenFeld in dmc.DbGruppenFelder
where gruppenFeld.KUERZEL.Substring(0,2) == gruppe.KUERZEL
select gruppenFeld;

bool gefunden = false;
foreach (DtoGruppenFeld gruppenFeld in abfrageGruppenfeld)
{
// befüllen der txt.Datei
zeile = string.Format("{0,-2}{1,-70}{2,-2}{3,-70}", gruppe.KUERZEL, gruppe.BEZEICHNUNG, gruppenFeld.KUERZEL, gruppenFeld.BEZEICHNUNG );

writer.WriteLine(zeile);
gefunden = true;
}
if(!gefunden)
{
// Zeile ohne Gruppenfeld ausgeben
}
}[/code]

Hey super. Vielen dank ;)

Hoffentlich krieg ich das nach ner Zeit auch so gut hin & schnell :-D

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.