Laden...
G
gollum9 myCSharp.de - Member
Softwareentwickler Dabei seit 20.02.2007 84 Beiträge
Benutzerbeschreibung

Forenbeiträge von gollum9 Ingesamt 84 Beiträge

30.07.2007 - 13:57 Uhr

Axo - dann sorry für den Spam^^
Hätte mir den Foren- bzw. Thread-Namen bisi genauer angucken sollen 😉

30.07.2007 - 11:57 Uhr

Ja, dieses "Zeugs" findest du hier in nahezu jedem zweiten Artikel 😉

Aber Spaß beiseite ... prinzipiell gibt es mehrere Möglichkeiten die Datenbankanbindung zu lösen mit ADO.NET.

Die beiden üblichen (behaupte ich jetzt mal) sind:*Verwendung eines DataAdapter *Verwendung von konkreten Implementierungen der IDbConnection, IDbCommand, IDataReader

Wenn Du einen IDataAdapter benutzt nimmt er Dir relativ viel Arbeit ab (Verbindungsaufbau zu DB usw usf) - daher würd ich dir das empfehlen.
Schau Dir das am besten mal in der MSDN anhand des SQLDataAdapter an ... da gibts relativ viele und gute Infos.

19.07.2007 - 17:58 Uhr

machst du das bei einer einzelnen Schleife auch so? Oder verwendest du da break? Wenn du es auch so machst, ok, dann ist das eben dein Weg. Wenn du aber break verwendest, dann solltest du dich fragen, warum du bei zwei Schleifen plötzlich eine andere Variante lesbarer findest, als bei einer.

Nene, mein Kommentar war unabhängig von der doppelten Schleife - ich benutze nie break - außer ich muss an Code arbeiten in dem es eingesetzt wurde, dann ziehe ich normalerweise den Stil meines Vorgängers durch.

... hat man i.d.R. schon was falsch gemacht. Eine Methode sollte sollte i.d.R. nicht länger als eine Bildschirmseite sein.

Da stimm ich Dir vollkommen zu.

Aber das wissen leider die wenigsten Programmierer, bzw. das hat vor 10 Jahren niemanden interessiert 😉
Oder die Funktion bzw. die Schleife sind einfach "historisch gewachsen" ...

Auf jeden Fall hatte ich schon mit so Monsterschleifen zu kämpfen und wenn dann noch so breaks drin stecken wie:


if (a3 < cntR && s6 != "done" || !checkP(xyz))
   break;

Ok, ich geb zu, es waren nicht nur die breaks die mir zu schaffen gemacht haben, sondern auch die netten aussagekräftigen Variablennamen. Es gibt tatsächlich Programmierer die behaupten es wäre sinnvoll Vars durchzunummerieren, weil man die ja dann viel schneller schreiben könnte -> 🤔 -> das läuft bei mir unter "Aktive Arbeitsplatzsicherung"^^

Naja, ich schweife ab ... vielleicht bin ich auch einfach zu vorbelastet ... ich geh jetzt heim - schönen Feierabend 8)

19.07.2007 - 17:28 Uhr

Hi Herbivore,

hm, ich finde es von der Lesbarkeit des Codes her sauberer die Bedingungen im Schleifenkopf zu definieren und erkennen zu können.

Z.B. bei einer Schleife die über mehrere hundert Zeilen geht, habe ich bei der While-Lösung alle Bedingungen an einer Stelle und muss nicht den ganzen Körper durchgehen um die Abbruchlogik nachvollziehen zu können.

19.07.2007 - 17:15 Uhr

Wäre es nicht eine sauberere Lösung in dem Fall eine entsprechende While Schleife zu benutzen?

Z.B.:


while (i < lenght && weitermachen)
{
   while(n < length && weitermachen)
   {
      if (true)
      {
         weitermachen = false;
      }
      n++;
   }
   i++;
}

18.07.2007 - 15:54 Uhr

Allerdings bringt es mich absolut nicht weiter... und von "Casten" steht da nix.

Ok, ich geb zu die Aussagen dort sind in dem Fall nicht unbedingt so hilfreich^^

Aber in dem Fall ist der Fehlertext selbst schon relativ aussagekräftig:

Error 1 'object' does not contain a definition for 'test'

Er sagt ja, 'object' enthält keine Definition bzw. Implementierung der Funktion 'test'.
Ist ja klar, weil 'object' die Oberklasse aller Klassen ist.

Aber das sind halt Grundlagen die man nicht in nem Forum (oder selten^^) lernt.
Wie herb sagt - am besten Du kaufst Dir ein gutes Buch und liest mal zwei Abende lang ... schön Therie pauken. Dann probierst Du ein bischen rum, ob das wirklich stimmt was da alles drinsteht 😉 ... und ich verspreche Dir Du wirst begeistert sein wie schön logisch das doch alles ist, was Dir vorher völlig unnachvollziehbar vorkam 😉

18.07.2007 - 14:34 Uhr

Das Array weiß nicht welche konkreten Objekte es enthält, deswegen musst du es casten:

(d[0] as data).test

Aber das sagt die Fehlermeldung doch eindeutig.
Du solltest Dir dringend mal die fundamentals aneignen und selbständiges Arbeiten mit der MSDN - du findest z.B. auch zu vielen Compilermeldungen dort Hilfe.

18.07.2007 - 09:16 Uhr

Hehe, der Antikettenbrief ist auch deshalb sehr witzig, wei er direkt nach dem Funkspruch-Hoax gepostet wurde Augenzwinkern Sieht fast nach ner Antwort aus g

Ist das ein HOAX?
Nein bitte nicht ... es wär so schön gewesen^^

17.07.2007 - 14:59 Uhr

LOOOOL - GEIL!
😁 😁 😁

Ich kannte den net - vielen Dank - bei uns lacht sich grad die halbe Firma tot! 😉

Der Vollständigkeit halber will ich hier auch nochmal was außerhalb des Themas posten ... und zwar den original ANTIKETTENBRIEF!
Kann unheimlich als Standard-Antwort an alle HOAX Kettenbriefe zurückschicken *gg

Wer ihn noch nicht kennt unbedingt lesen!
Quelle: http://ug05.schneewald.de/antikettenbrief/

Hallo, mein Name ist Seppli von der Alp.

Ich leide unter einigen sehr seltenen und natürlich tödlichen Krankheiten, schlechten Klausur- und Examensergebnissen, extremer Jungfräulichkeit und Angst davor, entführt und durch einen rektalen Starkstromschock exekutiert zu werden, weil ich circa 50 Milliarden beschissene Kettenbriefe nicht weitergeleitet habe. Kettenbriefe von Leutchen, die tatsächlich glauben, dass, wenn man diese Briefe weiterleitet, dieses arme, kleine Mädchen in Arkansas, dass mit einer Brust auf der Stirn geboren wurde, genug Geld für die rettenden OP zusammenbekommt, gerade noch rechtzeitig, bevor die Eltern es an die "FreakShow" verkaufen. Glaubst Du wirklich, dass Bill Gates Dir und jedem, der "seine" Mail weiterleitet 100 Dollar geben wird? Recht hast Du, dass glaube ich nämlich auch...

Um es auf den Punkt zu bringen. Diese Mail ist ein großes FUCK YOU an all die Leutchen da draußen, die nichts besseres zu tun haben. Vielleicht wird sich der böse Kettenbriefkobold in meine Wohnung schleichen und mich sodomieren während ich schlafe. Sodomieren, weil ich diese Kette unterbrochen habe, die im Jahre 5 nach Christus begonnen hat, von irgendeinem dem Kerker entronnenen Kreuzritter nach Europa gebracht wurde, und die, wenn sie es ins Jahr 2800 schafft, einen Guinness-Buch Eintrag erhält.

Und hier die vier beliebtesten Typen:

Kettenbrief Typ 1
Hallo.

scroll weiter nach unten

Wünsch Dir was.

scroll weiter nach unten

Nein, das nicht.

scroll weiter nach unten

Nein, das auch nicht - Du kleines Schwein

scroll weiter nach unten

scroll weiter nach unten

scroll weiter nach unten

etc. Hahaha

Ersteinmal, wenn Du diesen Brief nicht in den nächsten 5 Sekunden an 5096 Leute schickst, wirst Du von einer einbeinigen lesbischen Leichtmatrosin vergewaltigt und von einem Hochhaus in ein 1m breites Güllefaß gestoßen.

Und das ist wahr!

Weil: DIESER Brief hier ist nicht wie all die anderen.

DIESER hier ist WAHR!!

Kettenbrief Typ 2
Hallo, und danke, dass Du Dir die Zeit nimmst, diesen Kettenbrief zu lesen. Es gibt da einen kleinen Jungen in Baklaliviatatlaglooshen, der keine Arme, keine Eltern, keine Eingeweide und zwei Ohren am Arsch hat. Das Leben dieses armen Kindes könnte gerettet werden, weil jedes Mal, wenn dieses Mail hier weitergeleitet wird, von AOL eine Deutsche Mark auf das "Kleine hungernde, arm-, bein-, eingeweide-, elternlose, Doppelohren-Jungen aus Baklaliviatatlaglooshen Spendenkonto" überwiesen wird. Automatisch! Uneigennützig! Ach ja, und vergiss nicht, wir haben absolut keine Mittel und Wege die versandten Emails zu zählen, selbst mit NASA und BND- Unterstützung, und das hier alles ist ein großer Hirnfick. Also, mach weiter! Sende dieses Mail zu 5 Personen innerhalb der nächsten 47 Sekunden.

Kettenbrief Typ 3
Hallöchen da draußen! Dieser Kettenbrief existiert seit 897. Das ist absolut unglaublich, weil es damals noch gar keine Emails gab. Und so funktioniert es: Schicke ihn innerhalb der nächsten 7 Minuten an 15.067 Leute weiter, von denen Du denkst, sie könnten ihn gebrauchen, sonst...:

Bizarres Horror-Szenario Nr. 1

Noch bizarreres Horror-Szenario Nr. 2

Noch seeehr bizarreres Horror-Szenario Nr. 3

Kettenbrief Typ 4
Falls es Dich interessiert, hier schicke ich Dir ein Gedicht, das ich geschrieben habe. Sende es an jeden Deiner Freunde.

Freunde
Ein Freund ist jemand, der Dir immer zu Seite steht.
Ein Freud ist jemand, der Dich mag, obwohl Du übel
nach Jauche stinkst und Dein Atem vermuten lässt,
dass Du gerade Aldi Katzenfutter gegessen hast.
Ein Freund ist jemand der Dich mag, obwohl Du so
hässlich wie eine ganze Schachtel von Soldatenärschen
(inklusive Wolf!!!) nach 50 km Marsch bist.
Ein Freund ist jemand, der Dich sauber macht, wenn
Du Dich mal wieder besoffen selber vollgekotzt,
beschissen und bepisst hast.
Ein Freund ist jemand, der die ganze Nacht bei Dir bleibt,
wenn Du wegen Deines beleidenswerten traurigen Leben weinst.
Ein Freund ist jemand, der vorgibt, dass er Dich mag,
obwohl er sich heimlich ausmalt, wie Du von einer Horde
schizophrener Schimpasen vergewaltigt wirst.
Ein Freund ist jemand, der Deine Toilette und Spüle putzt,
dann Geld bekommt und geht und kein Wort Deutsch spricht.
(uuups, Entschuldigung, das ist die Putzfrau.)
Ein Freund ist niemand, der Dir Kettenmails schickt,
damit sein geheimster Wunsch endlich bei Naddel zu scoren wahr
wird.

So, und jetzt schick das hier weiter! Falls nicht, wirst Du nie nie wieder Sex haben.

War das verständlich? Wenn Du Kettenbriefe bekommst, die Dir androhen, ungepoppt und glücklos zu bleiben, lösche sie. Wenn sie wenigstens lustig sind, schick sie weiter an Leute, von denen Du denkst, sie teilen Deinen Humor. Fick nicht anderen Leuten virtuell ins Knie, indem Du ihnen ein schlechtes Gewissen wegen eines Leprakranken in Botswana machst, der noch dazu keine Zähne hat und seit 27 Jahren auf dem Rücken eines toten Elefanten festgebunden ist und dessen einzige Chance jede weitergeleitete Mail ist, weil andernfalls eine Mondrakete in seinen Vorgarten stürzt.

Ich hoffe, ich habe euch ein kleinbisschen angeregt, diese Kettenbriefe nicht einfach gedankenlos weiterzuschicken. Ihr seid ja wohl alle intelligent genug, um zu wissen, dass da nichts dahinter steckt! Macht was viel besseres damit: VERARSCHT SIE! Verändert sie und schickt sie euren Freunden, Kollegen, Geschwistern, Grosseltern und Töchter weiter und lacht darüber! Der kleine, arme Junge mit einer Eiterblase in seinem Penistumor, der nicht mehr Pissen kann, wirds euch danken! (Und ich übrigens auch!)

Also Leute, leitet auch diesen Shit weiter, denn ich weiss, ihr könnt nicht anders!

16.07.2007 - 12:10 Uhr

Hört sich nach einem Deadlock an.
Kann es sein, dass Dein zweiter Prozess in eine Endlos-Schleife oder irgendeinen Waitstate reinläuft?

Wieso debuggst Du den Fehler nicht? So in der Luft rumzustochern halt ich für net so sinnvoll.

Edit: Ok, jetzt biste ja schon ein Stück weiter.
Generell würde ich Dir abraten mit Messageboxen zu debuggen ... ich hab die Erfahrung gemacht, dass das Handling (war allerdings nicht .NET) der entspr. Events nicht unbedingt Rückschlüsse auf den Programmfluss zuläßt...

Leider kenn ich mich mit dieser spez. Problematik nicht genug aus um Dir ein "best practice" präsentieren zu können, sry.

13.07.2007 - 15:36 Uhr

wie sieht es allerdings bei Anderen aus? Läuft der Test überall so vorbildlich? Ich spreche auch die Hobbyentwickler an.

Hehe, ich behaupte mal bei 99,9% der Hobbyentwickler gibts kein Testprocedere.
Man guckt meistens kurz obs geht, und der Rest wird von den Anwendern erledigt 😉

Der Punkt ist, nach meiner Erfahrung, dass selbst schätzungsweise 90% der Softwarefirmen kein Testprocedere definiert haben ... selbst mittelständige bis große Unternehmen verzichten größtenteils darauf.
"Testen, Dokumentation - ist ja ganz nett, aber momentan leider keine Ressourcen verfügbar" 😉

13.07.2007 - 08:52 Uhr

Wie, Frauen sind garkeine Randgruppe?

Ne, mal im Ernst - ich muss doch net drunterschreiben, dass das ironisch gemeint ist, oder? Ist ja wohl klar. 🤔

12.07.2007 - 13:46 Uhr

LOOOL
Die letzten beiden sind echt geil!
Schön die Randgruppen abgegrast^^

Da fehlen nur noch ein paar Frauenwitze - dann hätten wir sie alle 😉

Gott gab den Menschen Intelligenz,
Außnamen bekamen die Regel!

Eine schwangere Frau kommt zum Metzger, und sagt:
"Ich kriege ein Kilo Hackfleisch und halbes Kilo Leberwurst."
"Nun, wann ist es soweit?"

12.07.2007 - 12:38 Uhr

es gibt mir hier erst Ansätze für einen Glaubenskrieg, den wir alle bitte besser vermeiden. Vielen Dank!

herbivore

PS: "sonst gibts gleich eins auf den Deckel": gut erkannt. Wobei ich gepostet hatte, bevor ich deinen Beitrag gesehen habe.

*gg - du bist echt unglaublich^^
Ich hatte kaum den Gedanken geäußert, dass Du uns gleich zurückpfeifst - und schwups - als hättst Du nen 7ten Sinn für "Glaubenskriege"^^ 😉

12.07.2007 - 12:26 Uhr

Nö, dann wären wir alle Java-Programmierer Zunge raus

Hätte ich auch kein Problem mit. Ist mir ehrlich gesagt egal, in welcher Sprache ich programmiere - solange ich für den jeweiligen Zweck genug zur Auswahl hab.

Aber ich glaub wir hören besser auf mit so Grundsatzdiskussionen - sonst gibts gleich eins auf den Deckel 😉

Daher poste ich alibimäßig auch mal zwei Witze (ohne M$ Bezug 😉 ):

Ein Knastbruder zum anderen: "Weisst du, was mir schwer zu schaffen macht? Dass der 200 000-Mark-Computer den ich geklaut habe, heute überall für 99,90 DM verkauft wird!"

Zitat eines EDV-Neulings: "Rechenzentrum - das war für mich bisher eine Bezeichnung für eine Harken-Verkaufsstelle."

12.07.2007 - 11:26 Uhr

Ohne Microsoft und ohne Windows hätten wir wohl weder .NET noch C#. Also zur Abwechslung bitte mal ein paar Linuxwitze. Augenzwinkern

Oja, welch tragisches Schicksal^^
Dann würden wir jetzt mit einem der vielen tausend Produkte arbeiten die Microsoft aufgekauft und stillgelegt hat^^

12.07.2007 - 09:53 Uhr

das ist nicht die Installationsroutine. Das ist der Code von Windows selbst.

Dann fehlt mir aber da die Ausgabe

    printf("Sie haben die Maus bewegt - bitte starten Sie den Rechner neu, damit die Änderungen wirksam werden!");

😁

12.07.2007 - 09:22 Uhr

LOL - wie bist Du denn an die Sourcen der Windows Installationsroutine rangekommen?^^

11.07.2007 - 17:39 Uhr

thx @herb ... die Idee hatte ich jetzt gerade auch^^
Aber irgendwie kann ich jetzt net mehr drüber lachen^^
Was dann doch wieder lustig ist *gg

Also insofern hat Andi wiederum recht - Witze erklären ist blöd 😉

11.07.2007 - 17:32 Uhr

den abgeänderten 😁

Edit:
das hat mir jetzt irgendwie keine Ruhe gelassen^^

@herbi
ldr hat den entscheidenden Teil markiert Augenzwinkern

[edit] witze erklären is blöd Augenzwinkern

Oder will er damit sagen er ist einer von denen, die das Binärsystem nicht kennen?

10.07.2007 - 17:21 Uhr

Ui - ich nehm alles zurück und behaupte das Gegenteil, sry^^
pöser Junge^^

10.07.2007 - 16:44 Uhr

ne nicht wirklich ich finde ja noch nicht mal annähernd irgendeinen Button wo Klassendiagramm in Deutsch/Englisch steht!!

Ähm, du solltest die Antwort von Nin vielleicht nochmal in aller Ruhe durchlesen - dort liegt die Lösung aller Deiner Probleme 😉

10.07.2007 - 15:59 Uhr

Sagen wir´s mal so: Heute ist einer dieser Tage, wo alles was ich im Projekt anpacke, nur zu Verschlimmbesserungen führt - da mach ich mich doch lieber hier nützlich... 😉

*g - dann wollen wir mal hoffen, dass dieser Zustand noch möglichst lange anhält 😉

Back 2 Topic:

Der BusinessContext soll ja insbesondere auch die Aktualisierung von Daten handhaben.

Ok, jetzt bin ich bei Dir 😉

Ja, Reporting triffts auf den Punkt.
Ist allerdings nur ein Modul der zu entwickelnden SW, von daher überlege ich jetzt das BusinessContext Konzept in den Modulen einzusetzen wo die Anforderungen es ermöglichen/erfordern.
Da wir uns momentan am Ende des Prototyping befinden ist es jetzt noch möglich solche zentralen Entwurfsentscheidungen zu überdenken.
Allerdings war für mich ja gerade die Performance die Motivation etwas umzustellen - die wird allerdings gerade im Reporting benötigt^^

Wie weit ist denn Dein/Euer Projekt?
Und in welcher Größenordung in MT ist es angesiedelt?
Es handelt sich um eine komplette Neuentwicklung/Redesign?

BTW: Hat jemand schon Runtime Profiling von C# Applikationen betrieben? Wenn ja mit welchen Tools?

10.07.2007 - 14:12 Uhr

Danke erstmal für die ausführliche Auskunft.
Find ich echt geil, dass Du Dir ohne eigenes Interesse soviel Zeit nimmst uns das zu vermitteln!

Wie aufbereitet oder roh die Daten in das BusinessContext-Objekt gelangen, ist bei uns Aufgabe der Datenlogik und die ist komplett in der Datenbank SQL Server 2005.

Hm, aber das bedeutet doch, dass die Geschäftslogik im Datenbank-Layer realisiert ist, oder?

Um meinen Standpunkt verständlich zu machen kurz ein Beispiel:

Man entwickelt eine Statistik Komponente, die einfache bis sehr komplexe Statistiken erzeugt in div. Ausgabeformaten.

Dabei werden z.B. Mittelwerte berechnet, prozentuale Werte uvm. (GL) und dann alles (als BO) an z.B. den PDF Generator geschickt der des Weiteren noch einen Definitionssatz mit Layout-Informationen bekommt und alles in eine Tabelle haut.

So, die Geschäftslogik führt also diverse Berechnungen aus, bereitet die Daten auf z.B. auch Kürzung von Float-Zahlen auf 3 Nachkommastellen (inkl. Globalisation/Localisation) und packt alles in ein BusinessObject, welches dann je nach gewünschter Ausgabeart als Schnittstelle zwischen den Komponenten weitergereicht wird.

Wie würde man das mit Deinem Design auf Basis des IBusinessContext verbinden können?

10.07.2007 - 10:04 Uhr

Guten Morgen Ron,

Deinen Ansatz finde ich sehr interessant.

Ich arbeite momentan auch mit BusinessObjects (also Dein erster Entwurf).
Leider macht sich das dafür notwendige "Umschaufeln" der Datensätze bei großer Anzahl, aus Performance-Sicht doch bemerkbar.

Allerdings würde ich aus Gründen der Wartbarkeit und Transparenz immer noch an dem Konzept festhalten.
Ein weiterer Punkt ist die Tatsache, dass die Daten beim Laden in die BusinessObjects noch nach Vorgaben der Geschäftslogik vorverarbeitet/manipuliert werden müssen, bevor sie an generalisierte Komponenten weitergereicht werden (z.B. einen PDF Generator o.ä.).

Wenn ich Dich richtig verstanden habe enthält Dein DataSet im BusinessContext ja die Rohdaten aus der Datenbank, oder?

Gruß,
Nils

09.07.2007 - 13:08 Uhr

Zwei Mathematiker in einer Bar: Einer sagt zum anderen, daß
der Durchschnittsbürger nur wenig Ahnung von Mathematik hat.
Der zweite ist damit nicht einverstanden und meint, daß doch
ein gewisses Grundwissen vorhanden ist. Als der erste mal kurz
austreten muß, ruft der zweite die blonde Kellnerin, und meint,
daß er sie in ein paar Minuten, wenn sein Freund zurück ist,
etwas fragn wird, und sie möge doch bitte auf diese Frage mit
"Ein Drittel x hoch drei" antworten. Etwas unsicher bejaht die
Kellnerin und wiederholt im Weggehen mehrmals:
"Ein Drittel x hoch drei..."
Der Freund kommt zurück und der andere meint:
"Ich werd Dir mal zeigen, daß die meisten Menschen doch was von
Mathematik verstehen. Ich frag jetzt die blonde Kellnerin da,
was das Integral von x zum Quadrat ist." Der zweite lacht bloß
und ist einverstanden. Also wird die Kellnerin gerufen und
gefragt, was das Integral von x zum Quadrat sei. Diese antwortet:

  • "Ein Drittel x hoch drei."
    Und im Weggehen dreht sie sich nochmal um und meint:
  • "Plus c."

Hmm, also entweder es ist einfach zu lange her bei mir, oder ich steh ganz einfach aufm Schlauch ... ich raffs net^^ ... bitte erlöst mich von meinen Qualen^^

06.07.2007 - 12:05 Uhr

Hallo,
ich suche jemanden der sich etwas ausführlicher mit ITextSharp beschäftigt hat.

Ich benutze diese Bibliothek um komplexe PDFs zu erstellen, was sehr komfortabel damit umsetzbar ist (im Vergleich zu z.B. dynaPDF o.ä.).
Ich habe mir einen Wrapper um das ITextSharp herumgebaut, welcher über einfache generelle Schnittstellen ermöglicht spezielle Dokumenttypen mit wenigen Codezeilen zu erzeugen.

Allerdings habe ich ein Problem mit einem bestimmten Fehlerfall.

Wenn während der PDF Generierung in der Geschäftslogik ein Fehler passiert (z.B. bei der Datenvorverarbeitung), aber das PDF File schon geöffnet ist kommt es zu folgendem Problem:

Ich muss das FileHandle im Catch Block schließen.
Normalerweise würde ich dafür folgenden Code benutzen:


// Im Konstruktor ...
Document _PDF = new Document();
this._Writer = PdfWriter.GetInstance(this._PDF, new FileStream(pdfPath, FileMode.Create));

// ... Funktionalität ...

// Am Ende, bzw. nach einem Fehler...
this._PDF.Close();

Die letzte Anweisung wirft eine Exception, wenn das 'Document' keine Seiten enthält.
Folge: Der FileStream wird nicht freigegeben.

Ich habe keine Möglichkeit gefunden über das 'Document' oder 'PdfWriter' Objekt explizit an den FileStream ranzukommen.

Daher speichere ich mir den FileStream als Member und gebe ihn manuell frei im oben genannten Fall:


            if (this._PDF.PageNumber > 0)
                this._PDF.Close();
            else this._PDFFile.Close();

So werden die Files zwar freigegeben, aber sind keine gültigen PDF Dokumente mehr und nicht lesbar 🙁
Durch den manuellen Eingriff verhindere ich scheinbar das finalisieren des PDFs o.ä.

Kann mir dabei jemand weiterhelfen?

04.07.2007 - 15:42 Uhr

habe es nur als String versucht weil herbivore gemeint hat das geht so...

Er hat das gesagt, weil Du gesagt hast Du willst die Verzeichnisnamen im Array haben.
Dafür braucht nimmt man normalerweise ein Objekt vom Typ String.

Oder ist es nicht gut wenn ich das komplette Objekt im Array versuche zu speichern?

Das kannst Du auch machen, aber dann musst Du das Array halt entprechend anlegen:


data[] d = new data[ddir.Count];
04.07.2007 - 09:42 Uhr

aber es is e gegangen

Wäre nett, wenn Du uns noch sagen würdest wie die Lösung aussieht.

03.07.2007 - 15:48 Uhr

Wie hast dus denn bisher ausprobiert?
Auf was für Probleme bist du gestoßen?

26.06.2007 - 14:53 Uhr

Ich befürchte es handelt sich hier tatsächlich um einen Bug.

Ist schon bisi länger her, da hatte ich massiv Probleme mit HasChanges() und RowState() von DataSets.

Ausführliche Tests und Recherchen haben mich am Ende auch zu dem Schluss kommen lassen, dass es sich um einen Bug handelt.

Vgl: HasChanges() Bug?

Ich hab das Problem dann für mich mit einem häßlichen, dreckigen und unbefriedigenden Workaround gelöst 😉

26.06.2007 - 10:24 Uhr

Hm, herbivore hat doch was dazu geschrieben ...

Ich hab leider bisher keine RegEx nur unter C benutzt, daher kann ich dir bei der konkreten Implementierung net helfen.

Aber unser Freund und Helfer MSDN hat doch da ein supereinfaches Beispiel dazu!?

public class Test
{

    public static void Main ()
    {

        // Define a regular expression for repeated words.
        Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b",
          RegexOptions.Compiled | RegexOptions.IgnoreCase);

        // Define a test string.        
        string text = "The the quick brown fox  fox jumped over the lazy dog dog.";
        
        // Find matches.
        MatchCollection matches = rx.Matches(text);

        // Report the number of matches found.
        Console.WriteLine("{0} matches found.", matches.Count);

        // Report on each match.
        foreach (Match match in matches)
        {
            string word = match.Groups["word"].Value;
            int index = match.Index;
            Console.WriteLine("{0} repeated at position {1}", word, index);   
        }
        
    }
	
}

26.06.2007 - 10:14 Uhr

hallo, die alte software macht das anders, ich solls aber mit regex machen 🙂.

Jo, da haben wir uns falsch verstanden.
Ich meinte ja nicht, dass Du den alten Code kopieren sollst, sondern die angwandten Bedingungen analysieren und als RegEx umsetzen.
Vorteil: Wiederverwendung bewährter Vorgehensweisen/Lösungen kann Dir seeeehr viel Ärger ersparen - und Fehlersuche in RegEx ist nicht unbedingt erfreulich 😉

Aber wenn Du die richtige Expression auch so schon hast ist ja alles in Butter 😉

25.06.2007 - 11:49 Uhr

Ui, hehe - wer hat denn diese Struktur verbrochen? 😉
Nein sag nix - lass mich raten - wir habens hier mit einem Prachtexemplar einer "historisch gewachsenen" Lösung zu tun, stimmts?

Im Endeffekt ist es immer das gleiche bei solchen Stringverarbeitungen.
Du musst Regeln herausfinden, anhand derer Du den String splitten kannst.
Wenn es keine eindeutigen Regeln gibt, ist es nicht möglich den String fehlerfrei zu aufzusplitten.

Aber da würde ich ganz pragmatisch vorgehen - irgendwo muss es ja eine Implementierung geben, die diese Datenstruktur schon verarbeitet ... dort würde ich mir ansehen anhand welcher Regeln das passiert, und diese dann in Deinen Code, bzw. in den RegEx übertragen.

22.06.2007 - 15:52 Uhr

Ähm, bitte.
Wieso kannst Du mit dem Link nix anfangen?
Ist doch sehr ausführlich.

Ich habe die Sessionverwaltung selbst implementiert um eine Unabhängigkeit von ASP.NET und IIS usw zu erhalten.
Aber der Aufwand ist relativ hoch, daher würde ich dir die fertige Sessionverwaltung empfehlen ... da kann ich Dir allerdings keine Sourcen o.ä. anbieten.

Wie ich an die SessionID komme weiss ich. Ist diese Standardmässig zeitlich begrenzt?

Ne, da hast Du was falsch verstanden (oder ich?^^).

An die SessionID kommst Du nicht, sondern Du erzeugst eine, wenn sich jemand korrekt authentifiziert. Die SessionID ist einfach ein eindeutiger String, sonst nichts.
Wie lange Du sie gültig hältst ist alleine Deine Sache (wenn Dus selbst impl.) oder Konfigurationssache.

Ich würde Dir wirklich empfehlen Dich nochmal mit dem Thema auseinanderzusetzen.
Wenn du noch Detailfragen hast, versuch ich gerne zu helfen.

21.06.2007 - 16:00 Uhr

nein.das is nicht so

ich kenne mich da schon aus

habe schon jemand anderen gefragt der info studiert und auch c# macht

das liegt an der feldvariable..und dann die einzelnen zahlen zusammenfügen

Axo, die Feldvariable ... ja, jetzt fällts mir auch wieder ein^^

Hallo Millersoft,

ich habe zwei andere Moderatoren gefragt und wir haben alle drei nicht verstanden, was du uns sagen willst.

LOOOOL - geil!

Danke, mal wieder herzlich gelacht *g - und @herbivore, ich bewundere Deine Geduld 😉

sry für den Spam - ich musste einfach mal die Community an meiner Freude teilhaben lassen 😁

21.06.2007 - 15:45 Uhr

Was ist der Vorteil Deines Tools "Games & More" gegenüber dem Desktop oder dem Win Startmenü?

21.06.2007 - 11:30 Uhr

Ja @herbivore, stimmt.
Aber ich denke nicht, dass es sich hier um eine unerwünschte Benutzung handelt.

Denn, was ist schon dabei, wenn einen ein Headhunter oder ne Personalberatung anruft ... meiner Erfahrung nach sind die meisten seriös und ablehnen kann man immer, ist doch nix dabei.

Im Gegenteil - es stärkt doch meine Position, wenn meine Vorgesetzten mitbekommen, dass ich gefragt bin UND vor allem, dass ich Anfragen ablehne.

In meinem Fall wurde z.B. meine Probezeit beim neuen Arbeitgeber extrem verkürzt und ich möchte nicht ausschließen, dass es auch an diversen Anrufen lag 😉

20.06.2007 - 16:14 Uhr

rtfm

20.06.2007 - 09:50 Uhr

Jo, das hängt logischerweise von den Bedingungen hab!

Wenn der String fixed length ist, dann gehts einfach mit:

"BFOT0003985".Substring(5, 7);

Ansonsten regex - siehe Vorrredner 😉

20.06.2007 - 09:47 Uhr

Ich bin dort angemeldet und finds ne super Sache.

@feadur: ich weiß nicht, warum Du davon abratest - was soll denn passieren? Außer dass man angerufen oder angeschrieben wird, was m.M.n. nicht schadet.

Und der eigentliche Zweck, in meinen Augen, ist, dass man seine (Business-) Kontakte super verwalten kann.
Ehemalige Kollegen, Freunde usw. sind dort immer mit aktuellen Kontaktdaten zu finden - man verliert den Kontakt nicht.

Noch ein Vorteil: Deine Kontakte werden als Netzwerk abgebildet.
D.h. wenn Du ein paar Kontakte hast, wirst Du indirekt zu jeder Person im Netzwerk (1,5 Mio ca?) eine Beziehung haben - manchmal über mehrere Punkte...

19.06.2007 - 10:21 Uhr

Hm, ich würde ja vermuten, es liegt daran, dass der DataReader nochmal weitergegeben/kopiert wird.
Aber es ist ja ein Referenztyp, und sollte auch nur als Referenz weitergegeben werden ...

Was macht denn Deine Funktion KontoSaldo()?
Die muss doch auch auf ner Referenz des DataReaders arbeiten, oder?
Irgendwo müssen ja die Daten kopiert werden?!

14.06.2007 - 09:12 Uhr

Ah, ok - die Beschreibung ist vollkommen 😉
Dann würde ich an Deiner Stelle den Client und den Server bzgl. der Auth umstellen.

Und zwar ist die Standard-Lösung (behaupte ich jetzt einfach mal) für eine Sessionverwaltung, du implementierst serverseitig eine Webmethod "login" o.ä. die als Parameter LoginName und Passwort bekommt und einen String "SessionID" zurückliefert an den Client.
Der speichert diese und schickt bei allen weiteren Aufrufen immer diese SessionID mit, die du serverseitig jedesmal auf Gültigkeit prüfst. Wie Rainbird sagt, sollte man die Gültigkeitsdauer auf eine gewisse Zeit beschränken.

Die Entscheidung die du dann noch treffen musst, ist, die ASP.NET Sessionverwaltung zu benutzen, oder die Session-Daten manuell in eine DB zu speichern.
Infos dazu findest Du hier: ASP and Web Session Management

13.06.2007 - 14:10 Uhr

Punkt 3 😉

13.06.2007 - 14:06 Uhr

Nein ich sagte es doch schon x mal

lol - sry, aber Du widersprichst Dir höchstens x mal.
Die Frage von B3nj ist vollkommen berechtigt.

Zuerst sagst Du, in den Variablen stehen Werte drin, dann fällt Dir auf, dass die Variablen doch nicht initialisiert sind zum Zeitpunkt Deines Vergleichs (was ja die Fehlermeldung ganz klar sagt).
Dann initialisierst Du sie mit now, damit deine Minutenber. funktioniert, um sie danach aus der DB zu überschreiben?
Wer soll das denn verstehen, bzw Dir auf dieser Basis effektiv helfen??

@marsgk
C#-Code:
DateTime.MinValue

gibt bei mir den Wert 01.01.0001 00:00:00 und nicht alles Nullen

Der 1.1.01 ist der Zeitpunkt Null der Microsoftschen Zeitrechnung - alle Zeitpunkte davor entsprechen einer negativen Anzahl von Ticks.
Davon abgesehen gibts das Datum 0.0.00 nicht 😉 - das wäre dann wohl der 31.12.01 BC - hm, ne interessante Frage^^

13.06.2007 - 13:45 Uhr

Hm, die Informationen von Dir sind nicht besonders ausführlich.

Was meinst Du mit SOAP Datei?
Sowas gibts net - entweder Du meinst eine XML Datei, oder einen SOAP Request vermute ich.
Zweite Frage: Was meinst Du mit Webfunktion? Hast Du einen kompletten Webservice aufgesetzt? Wenn ja, was für einen?
Drittens: Was für einen Client hast du? Brauchst Du eine Session-Verwaltung? Oder soll das "Senden der SOAP Dateien" unabhängig voneinander stattfinden?

In Abhängigkeit dieser Punkte kann man dann ein sinnvolles Login/Sicherheits-Konzept entwickeln.

Um trotzdem nochmal auf Deine Frage einzugehen:
Es gibt kein allgemeines Rezept, wie man einen Header ausliest, da das von den verwendeten Bibliotheken, Klassen und deren Versionen abhängt (s.o.).
Wenn Du einen ASP.NET Webservice aufgesetzt hast, kannst Du mit dem Context Objekt auf die Eigenschaften des Request zugreifen - z.B. den Header mit "context.request.header".

11.06.2007 - 13:33 Uhr

Klar geht das.
Du musst nur die serverseitige Abfrage auf diegleiche DB/Tabelle laufen lassen.

Und zwischen den Clients irgendwie die SessionID übergeben ... z.B. über Cookies, s.o.

24.05.2007 - 10:45 Uhr

Tja - das ist halt immer das Problem - irgendwo muss der Schlüssel stehen.
Die einzige Lösung ist, dass Du die Verschlüsselung nicht beim Client machen kannst, sondern Serverseitig - also durch einen Webservice o.ä.
Dort kannst du dann den Schlüssel in einer DLL o.ä. verpacken - was natürlich auch net 100%ig sicher ist, aber für Deinen Anwendungsfall wohl ausreicht, oder?

24.05.2007 - 10:26 Uhr

Ok, verstehe.

Dann sehe ich aber keinen Einsatz für eine PKI (Public Key Infrastucture) - so habe ich Deine Aussage mit den div. Schlüsseln und m:n Beziehungen zumindest verstanden.

Weil das Problem ist ja, wenn du die Daten X mit dem Schlüssel K1 verschlüsselst, kannst Du sie nur mit dem privaten Schlüssel PK1 entschlüsseln ...
Eigentlich würde es ja reichen, wenn Deine App die jeweiligen Schlüssel kennt zum ver- und entschlüsseln ... die Rechte wer was lesen darf kannst Du ja normal über die Datenbank definieren ...

24.05.2007 - 09:38 Uhr

Du solltest Dich erstmal entscheiden, ob Du bestimmte Daten wie Passwörter verschlüsseln willst - dafür kannst du ne Einweg-Verschlüsselung wie MD5 o.ä. benutzen oder, was ich eher vermute, ob Du eine verschlüsselte Verbindung (SSL) einsetzen willst.

Bei SSL brauchst Du Dir keine Gedanken über die eigtl. Verschlüsselung zu machen, du baust einfach die Verbindung auf, und schickst die Daten drauf.
Ich habs noch net gemacht, aber denke nicht dass es besonders schwer ist^^