Laden...

Forenbeiträge von nicky Ingesamt 232 Beiträge

23.04.2012 - 20:08 Uhr

@MrSparkle

Danke für deine Antwort. Die Krankenkasse erkennt mich nur als Schüler an wenn a. (wie du schon sagtest) Ich nur x Stunden am Tag arbeite und b. wenn ich unter 375 Euro verdiene. So jedenfalls die Aussage der Beraterin.

Bezöglich Gründungszuschuss etc.:
Der nette Herr vom Arbeitsamt meinte das ich den Richtlinien nicht entspreche weil ich durchgehend gearbeitet habe oder halt Schüler war/bin. Nachdem ich ihn gefragt habe ob ich erstmal ein Jahr auf Staatskosten leben soll um mich zu qualifizieren meinte er nur "Ja, dann sieht es schon anders aus.." -> Dämlich!

Naja, so ist das dann wohl.. 😃

23.04.2012 - 18:53 Uhr

Wo wärst du sonst versichert wenn du kein Unternehmer wärst?

Familienversicherung - bis 25 !

Aber auch dann beträgt der Versicherungsbeitrag für Schüler / Studenten so um die 70€...
Ich finde für einen Mindestbeitrag ist ~330€ das schon ziemlich heftig...

23.04.2012 - 16:45 Uhr

Hallo,

ich bin Schüler, unter 25 und Einzelunternehmer. Die ursprüngliche Idee war es nebenbei ein bisschen Taschengeld zu verdienen... Naja, jetzt wunder ich mich über die krassen Beiträge für die Krankenkasse:

Der Mindestbeitrag für die "freiwillige" gesetzliche Krankenkasse beträgt für Selbstständige (ohne Kinder) 336,50€ !

Was machen die Einzelunternehmen die nur ein minimales Plus erwirtschaften? Die 336,50€ müssen ja gezahlt werden - So oder so - Oder versteh ich das falsch?
Entweder konnte meine Krankenkasse mir das nicht richtig verklickern oder es ist wirklich so wie beschrieben. Hoffentlich weiss es hier jemand genauer! 🙂

nicky

13.04.2012 - 17:15 Uhr

Hey, danke für die tollen Antworten - da ist mit Sicherheit was dabei! 🙂
Sollte dem nicht so sein werd ich mich wieder melden.

👍

13.04.2012 - 02:21 Uhr

Moin,

heute bekam ich mal wieder eine sehr merkwürdige Anfrage, jedoch scheint es dem Kunden damit sehr ernst zu sein, deshalb hab ich mich mal auf die Suche gemacht. Naja zu einem Ergebnis bin ich nicht gekommen deswegen hier nochmal meine letzte Anlaufstelle. 😃

Um das ganze jetzt mal abzukürzen: Der Kunde möchte Formular Elemente seiner Website über eine externe Anwendung steuern. Er besucht also besagtes Formular auf der Website und möchte dann via C# Anwendung Checkboxen in diesem Formular anwählen. Der weitere Verlauf der Formularausfüllung passiert dann wieder manuell.

Mein erster Gedanke ging in die Richtung "Webbrowser Componente in C# einbinden" jedoch möchte der Kunde definitiv über diesen Umweg gehen.

Hat jemand eine Idee?

03.04.2012 - 00:45 Uhr

Danke, das war es! 😃

02.04.2012 - 19:59 Uhr

Hallo,

ich bin zur Zeit auf der Suche nach einer Komponente die ähnlich wie bei dem Programm "Wiso Mein Büro" eine Art Tab Control auf der linken Seite hat. (Im Anhang ein Beispiel)
Folgende Komponente ist der Sache bei meiner Suche am nächsten gekommen:
http://www.codeproject.com/Articles/14298/TabStrip-Control

Kennt noch jemand andere Komponenten mit der man ein solches Menu realisieren kann?

nicky

06.02.2012 - 18:02 Uhr

Hey, danke für deine ausführliche Antwort!

Ja, eigentlich wollten wir den Text selbst verfassen. Ein weiteres Problem ist das mein Kunde kein Deutsch versteht. Auch wenn ich relativ gut Englisch sprechen kann, werde ich wahrscheinlich bei der Vertragssprache kein Kompromiss eingehen, denn ich möchte mich nicht auch noch mit fremdsprachige Mehrdeutigkeiten etc. befassen. Hat da jemand schonmal Erfahrungen gemacht?

Bisher habe ich noch kein Anwalt benötigt. Reicht da ein normaler Anwalt?

05.02.2012 - 22:35 Uhr

Hallo,

ich stehe vor einer seltsame Situation... Ich habe eine Software entwickelt die ursprünglich nur für den eigen Bedarf gedacht war.

Ich habe nun eine Kaufanfrage von einem Kunden erhalten die ich aber ablehnen musste, weil ich die Software unter keinen Umständen zu dem jetzigen Zeitpunkt verkaufen möchte.
Naja, jetzt hat mich der Kunde erneut gefragt ob er die Software gegen eine Nutzungsgebühr die er alle 4 Wochen auffrischen würde, benutzen könnte. Zusätzlich soll ich permanent die Software kundenspezifisch weiterentwickeln. Der Kunde verzichtet jedoch auf jeglichen Anspruch des Quelltextes. -> Damit bin ich grundsätzlich einverstanden.

Ich stelle dem Kunden also eine monatliche Nutzungsgebühr der Software sowie die geleisteten Arbeitsstunden in Rechnung. Jedoch hat der Kunde kein Anspruch auf die Verlängerung der Nutzung und auch keinen Anspruch auf den Quelltext.

Habt ihr so etwas in der Form schonmal gemacht? Kommt mir die Situation zu Unrecht seltsam vor? Worauf ist zu achten?

nicky

22.01.2012 - 19:42 Uhr

Dein Code macht so auch gar keinen Sinn. Du lagerst doch grad deine Arbeit in nem Thread aus, sonst müsstest ja net zum GUI Thread invoken um die Anzeige zu ändern. Und dann rufst du im GUI Thread DoEvents auf? Wieso? Da gibts überhaupt keinen Grund für. Wenn du den GUI
Thread so aus deinem Arbeiterthread zuballerst, dass er wieder blockiert - dann kannst du gleich das ganze Threading sein lassen.

Richtig, ich hab mein Main Thread wirklich zugeballert, sodass die Auslagerung nicht den gewünschte Effekt zeigte. Application.DoEvents war dann die einfachste aber auch dreckiste Lösung. Ich werde wohl die Progress Anzeige auf 10% Schritte oder so ändern...

Ok, ich denke ich hab alle Informationen bekommen die ich brauchte. Vielen Dank an euch 😃

22.01.2012 - 18:44 Uhr

Okay super, ich hab das Problem scheinbar gefunden - jedoch nicht durch Logging. Das hat irgendwie nicht so geklappt wie ich mir das vorgestellt habe.

Folgendes Problem: Ich habe einen Thread der in einer Schleife ein Event zu Visualisierung des Fortschritts feuert. Die Methode hinter dem Event sieht in etwa so aus:

        public void ProgressPerformStep()
        {
            if (InvokeRequired == true)
            {
                BeginInvoke(new DelProgressPerformStep(ProgressPerformStep));
            }
            else
            {
                lock (lockvar_UpdateProgressBar)
                {
                    try
                    {
                        SubmissionProgressBar.Value = SubmissionProgressBar.Value + 1;
                        Application.DoEvents();
                    }
                    catch (System.Exception e)
                    {
                        //logging code wird nicht erreicht
                    }
                }
            }
        }

Ich hab den Fehler jetzt gefunden in dem ich das Applications.DoEvents(); testweise ausgeklammert habe. Die Exception konnte ich jedoch nicht abfangen, der Logging Code wurde nie erreicht! Jetzt bleiben zwei Fragen offen:

  1. Warum löst Application.DoEvents(); bei mehrfachem Aufruf (Schleife) eine Stack Overflow Exception aus? (Unabhängig von der Notwendigkeit des Codes)

  2. Warum kann ich diese Exception nicht abfangen?

22.01.2012 - 16:38 Uhr

Hmm naja Logging ist ein guter Ansatz aber ich hab wirklich nicht den geringsten Anhaltspunkt, folglich weiss ich garnicht welche Methoden in Frage kämen. Ich möchte jetzt auch nicht das Logging um jede Methode separat basteln, gibt's da irgendwie einen intelligenteren Weg? 😃

21.01.2012 - 09:12 Uhr

Hmm ja, das Problem ist ich weiss noch nicht so richtig wie ich's debuggen soll weil ich den Fehler wie gesagt nicht reproduzieren kann.

21.01.2012 - 01:09 Uhr

Hallo,

ich habe eine Anwendung geschrieben die, kurz gesagt, Daten verarbeitet (multi threaded) und in eine Datenbank (Firebird 2.5 Embedded) schreibt.
Die fertige Anwendung hab ich dann einem Freund geschickt der diese mal für längere Zeit testen soll.

Nun hat er mir folgenden Fehler berichtet:> Fehlermeldung:

A new guard page for the stack cannot be created

Die genannte Fehlermeldung tritt auf wenn die Datenbank aktualisiert wird (Daten werden von einer Haupt Datenbank in die "Session Datenbank" geschrieben)!

Leider konnte ich den Fehler in keinster Weise reproduzieren deshalb die Frage:

Kann mir jemand sagen was die Fehlermeldung genau bedeutet, und was evtl. ein Anhaltspunkt für meine weitere Suche wäre.

Vielen Dank!

nicky

19.01.2012 - 18:22 Uhr

Wow, endlich!

Das hat super geklappt, vielen Dank an alle beteiligten!

18.01.2012 - 17:20 Uhr

Ich kann mir nicht vorstellen das so ein einfaches Problem den Entwicklern nicht aufgefallen wäre. Es ist ja nicht so das ich irgendwas exotisches versuche.

18.01.2012 - 16:30 Uhr

Naja, also 100.000 Datensätze sind in meinem Fall übertrieben. Wenn ich jetzt schätzen würde, schmiert die Datenbank nach 3 - 4 Tagen ab, (Out of Memory) weil sich, wie im ersten Beitrag beschrieben, der Speicher einer geschlossenen Datenbank nicht wieder frei gibt. Eigentlich klingt das Problem recht einfach. Vielleicht sollte ich das schließen des Servers irgendwie erzwingen wenn es über die vorgesehene Methode nicht klappt.

17.01.2012 - 20:21 Uhr

Niemand eine Idee? Ich hab ehrlich gesagt keine Ahnung wie ichs besser analysieren kann.

14.01.2012 - 16:13 Uhr

Ich habe mein Projekt jetzt mal so gut es geht mit dem Memory Profiler von SciTech analysiert und bin auf folgende Zeilen gestoßen.

		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c003b970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c003d970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c003f970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0041970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0043970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0045970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0047970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0037970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c004b970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c004d970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c004f970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0053970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000d0055960e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000d0056960e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00001000d1950e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000d0051970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0049970e00 - 1056KB
		\Device\HarddiskVolume2\ProgramData\firebird\fb_lock_c47a207c00000c0039970e00 - 1056KB

Kann mir jemand sagen was Firebird an der Stelle macht und warum die Resourcen nicht wieder freigegeben werden?

12.01.2012 - 19:12 Uhr

Hmm, leider hatte ich bisher noch keinen Erfolg das Problem zu lösen.

  1. Close und Dispose sind nicht das gleiche.

Was möchtest du mir damit sagen?

  1. Benutze einen Memory Profiler um herauszubekommen ob das was Du im Taskamanager siehst auch der wirklichkeit entspricht.

Kannst du einen empfehlen?, nach Möglichkeit kostenlos.

10.01.2012 - 22:36 Uhr

verwendetes Datenbanksystem: Firebird Embedded 2.0

Hallo,

ich hab mit meiner kleinen Datenbank Anwendung ein Speicherproblem. Ich habe ca. 20 Datenbank die ich nacheinander öffne, beschreibe und wieder schließe. Nachdem ich alles mögliche bis aufs "öffnen" und "schließen" der Datenbank ausgeklammert habe, bin ich jetzt der Meinung das meine "Schließ Operation" nicht korrekt funktioniert. Der Arbeitsspeicher erhöht sich nämlich mit jedem neuen Öffnen der Folge Datenbank.

Quellcodeauszug aus meiner Firebird Klasse:

        FbConnection connection = new FbConnection();
        FbConnectionStringBuilder cs = new FbConnectionStringBuilder();

        public void DBConnectionSettings(string path_name)
        {
            cs.Database = path_name;
            cs.UserID = "xxx";
            cs.Password = "xxx";
            cs.ServerType = FbServerType.Embedded;
            ...
            ...
        }

        public void CreateDatabase()
        {
            FbConnection.CreateDatabase(cs.ToString(), true);
        }

        public void OpenConnection()
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.ConnectionString = cs.ToString();
                connection.Open();
            }
        }

        public void CloseConnection()
        {
            if (connection.State != ConnectionState.Closed)
            {
                connection.Close();
            }
        }

Die Methoden ruf ich dann in einer Schleife nacheinander mit dem jeweiligen Path zu nächsten Datenbank auf..

Hat jemand eine Idee warum der Arbeitsspeicher nicht mehr freigegeben wird?

nicky

30.12.2011 - 19:47 Uhr

Du hast Recht, natürlich liegt hier ein Designfehler vor - Jedoch habe ich kein Einfluss auf die Änderung der Datenbank die zugeliefert wird 😃

Ciao

27.12.2011 - 19:02 Uhr

Hmm, okay folgenden Workaround habe ich jetzt:


                ds = fb.DatabaseToDataSet("SELECT * FROM ...");
            }

            DataTable view_ds = ds.Clone();
            view_ds.Columns[8].DataType = Type.GetType("System.Int32");

            foreach (DataRow dr in ds.Rows)
            {
                view_ds.ImportRow(dr);
            }

            dg.DataSource = view_ds;

Jedoch macht das mein DataGridView sehr "laggy"... Weiss jemand warum ? 😕

Edit1: dg.DoubleBuffered(true); hat geholfen, 😉

27.12.2011 - 16:56 Uhr

Ja, ich verwende ein DataTable aber leider hab ich damit auch kein Erfolg. Im Grund sieht mein Konstrukt so aus:

           DataTable ds;

           ds = fb.DatabaseToDataSet("SELECT * FROM ...")
           ds.Columns[20].DataType = typeof(int);

           dg.DataSource = ds;
           dg.Columns[0].HeaderText = "..";
           dg.Columns[1].HeaderText = "..";
           dg.Columns[0].HeaderText = "..";
	   ...
	   ...
	   ...

//Edit: Der DataType einer Spalte kann nicht geändert werden, wenn diese Daten enthält.

27.12.2011 - 16:40 Uhr

Das nützt leider nichts..

27.12.2011 - 15:29 Uhr

Hallo gfoidl,

danke für deine Antwort. Kriege das irgendwie nicht hin. Meine DataView ist datengebunden.

Deshalb bekomme ich auch immer folgende Exception:

Fehlermeldung:
Das DataGridView-Steuerelement ist datengebunden. Das Steuerelement kann nicht den Vergleich für den Sortiervorgang verwenden.

21.11.2011 - 14:34 Uhr

Hey,

ja die API habe ich mir Anfangs auch angeschaut. Leider hab ich damit nicht wirklich was brauchbares basteln können.

Naja, hab jetzt ein "Workaround" für mein Problem. Ich downloade die Mails nun innerhalb einer while Schleife bis der Server meldet das keine Mails mehr vorhanden sind. Ist nicht schön aber für meinen persönlichen Bedarf reicht's erstmal 😃

Der Nachteil ist natürlich das ich Anfangs nicht weiss wieviele Mails es werden... (Weil die Methode einen falschen Count liefert)

Bye

20.11.2011 - 18:58 Uhr

Moin,

ich habe ein Problem mit dem Abrufen des GMail Postfachs. Ich benutze OpenPop.NET für die Kommunikation mit dem Server.

Leider liefert die Methode GetMessageCount() ein falsches Ergebnis. Anstatt 500 Mails die sich im Postfach befinden liefert die Methode z.B 265. Möglicherweise liegt es daran das GoogleMail zusammenhängende Nachrichten automatisch zusammenfasst. - Bin mir da aber nicht sicher...

Kennt jemand eine andere Komponente die besser funktioniert?

nicky

09.11.2011 - 00:22 Uhr

Hallo,

ich benutze ein DataGridView und habe eine Spalte vom Typ VARCHAR. Die gefüllte Spalte könnte z.B. so aussehen:

1
3
500
60439
5034
60230
150
Unbekannt

(Lassen wir "Unbekannt" im folgenden mal außen vor...)

Wenn ich die Spalte jetzt sortiere, bekomme ich folgendes Ergebnis:

1
150
3
500
5034
60230
60439

Wie kann ich die Spalte nach einem "Integer Vergleich" sortieren sodass ich folgendes erhalte:

1
3
150
500
5034
60230
60439

02.11.2011 - 20:10 Uhr

Hmm, ist ja blöd. Naja ok... Dankeschön 🙂 👍

02.11.2011 - 16:37 Uhr

Ja ich benutze Firebird Embedded.

Achso ist das, also kann ich meine Datenbank nicht schützen ?

01.11.2011 - 19:26 Uhr

verwendetes Datenbanksystem: Firebird 2 Embedded

Muss ich noch irgendwas anderes in meinen Connection String (cs) einbauen damit die Datenbank mit User+PW geschützt ist? Egal was ich einstelle, die Datenbank ist immer ohne Login Daten aufrufbar 😕

            cs.Database = path_name;
            cs.UserID = "SYSDBA";
            cs.Password = "masterkey";
            //cs.UserID = "TestUser";
            //cs.Password = "testPW";
            cs.Port = 3050;
            cs.ServerType = FbServerType.Embedded;
            FbConnection.CreateDatabase(cs.ToString(), true);

01.11.2011 - 17:54 Uhr

NetOffice meine ich natürlich. Du hattest vollkommen Recht, der Umstieg war relativ Problemlos.

Alle Probleme sind beseitigt, Vielen Danke nochmal 👍

31.10.2011 - 10:51 Uhr

Okay, ich hab eben versucht auf NetObjects umzustellen. Leider habe ich schon Probleme bei der Verwendung der Samples. Obwohl ich die .dlls aus dem Net 4.0 Ordner genommen habe bekomme ich folgende Fehlermeldung:

LateBindingApi.Core.Factory.Initialize();
Die Assembly im gemischten Modus wurde während Version v2.0.50727 der Laufzeit erstellt und kann nicht während der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen geladen werden.
30.10.2011 - 23:09 Uhr

Danke für den Tipp! Leider schließt sich Excel immer noch nicht nach der Verwendung. Bzw. manchmal ja, manchmal nein.

30.10.2011 - 23:02 Uhr

Hmm meinst du dann habe ich überhaupt noch eine Zeitersparnis ? Dann könnte ich auch auf 1 statt 50 Statements pro Insert gehen und hätte mein Ursprungsproblem nicht mehr. (Aber auch keine Zeitersparnis)

30.10.2011 - 22:53 Uhr

verwendetes Datenbanksystem: Firebird 2.0

Hallo,

Um einen "Bulk" Insert in eine FB Embedded Datenbank zu machen benutze ich folgenden Weg:

Angenommen ich möchte 1000 Datensätze hinzufügen.

Mittels for-Schleife werden die INSERT STATEMENTS einem Insert Strings hinzugefügt. Ein Zähler überwacht das ganze, alle 50 STATEMENTS werden die Daten der Datenbank hinzugefügt.

Also habe ich theoretisch 20 Insert Strings. Soweit so gut...

Die Datenbank ist so designed das Duplicate nicht zugelassen werden. (UNIQUE bzw. Primary Key)

Taucht jetzt in den 50 Insert Strings ein String auf der in der DB schon vorhanden ist, wirft FB eine Exception. Die könnte ich "silencen" aber dann würden die restlichen 49 strings auf diesem Insert String auch nicht hinzugefügt werden.

Gibts da ein Exception Handling das die restlichen INSERT zulässt ?

EXECUTE BLOCK AS BEGIN INSERT....; INSERT....; when any do begin end
30.10.2011 - 02:54 Uhr

Hmm ich weiss nicht ob ich dich jetzt richtig verstanden habe aber das ist jetzt dabei rausgekommen:

Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Excel.Worksheets" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{000208B1-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)).
        public void CreateExcelReport()
        {
            Excel.Application xlApp = null;
            Excel.Workbooks xlWorkBooks = null;
            Excel.Workbook xlWorkBook = null;
            Excel.Worksheets xlWorkSheets = null;
            Excel.Worksheet xlWorkSheet = null;
            Excel.Range range = null;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.ApplicationClass();

            xlWorkBooks = xlApp.Workbooks;
            xlWorkBook = xlWorkBooks.Add(misValue);

            xlWorkSheets = (Excel.Worksheets)xlWorkBook.Worksheets;
            xlWorkSheet = (Excel.Worksheet)xlWorkSheets.Add(misValue, misValue, misValue, misValue);

            //Save Excel File
            xlWorkBook.SaveAs(jobpath + filename + ".xls", Excel.XlFileFormat.xlExcel8, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(false, misValue, misValue);
            xlApp.Quit();

            //Release Used Objects
            releaseObject(range);
            releaseObject(xlWorkSheet);
            releaseObject(xlWorkSheets);
            releaseObject(xlWorkBook);
            releaseObject(xlWorkBooks);
            releaseObject(xlApp);

        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch
            {
                obj = null;
            }
        }
29.10.2011 - 21:24 Uhr

So ich bin schonmal ein bisschen weiter gekommen. Jedoch ist es immernoch nicht so wie es sein sollte.

Folgendes passiert:

  • Excel Report 1 wird erstellt, Excel.exe bleibt im Taskmanager
  • Excel Report 2 wird erstellt, Excel.exe von Report 1 verschwindet und eine neue Excel.exe öffnet sich und bleibt im Taskmanager
    ...usw

Die übrig bleibende Excel.exe verschwindet erst mit dem schließen der Anwendung.

       public void CreateExcelReport()
        {
            Excel.Application xlApp = null;
            Excel.Workbooks xlWorkBooks = null;
            Excel.Workbook xlWorkBook = null;
            Excel.Worksheet xlWorkSheet = null;
            Excel.Range range = null;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.ApplicationClass();

            xlWorkBooks = xlApp.Workbooks;
            xlWorkBook = xlWorkBooks.Add(misValue);
            xlWorkSheet = new Microsoft.Office.Interop.Excel.Worksheet();
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Add(misValue, misValue, misValue, misValue);
			
            .....
            .....            
            .....

            //Save Excel File
            xlWorkBook.SaveAs(jobpath + filename + ".xls", Excel.XlFileFormat.xlExcel8, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(false, misValue, misValue);
            xlWorkBooks.Close();
            xlApp.Quit();

            //Release Used Objects
            releaseObject(range);
            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlWorkBooks);
            releaseObject(xlApp);
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch
            {
                obj = null;
            }
            finally
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }
28.10.2011 - 19:08 Uhr

Ehrlich gesagt bin jetzt total verwirrt und verstehe nicht was du mir damit sagen willst.

Kannst du mir das Anhand eines Bsp. nochmal verdeutlichen ? =)

28.10.2011 - 02:50 Uhr

Wenn das Worksheet kein Objekt von Typ "Excel.Worksheet" ist dann hab ich das Problem das mir die Erweiterungsmethoden "xlWorkSheet.Shapes" und "xlWorkSheet.get_Range" fehlen.

28.10.2011 - 00:48 Uhr

Hey ihr beiden, vielen Dank für die flotte Antwort 😃

Mal abgesehen davon das ich mit NetOffice diese Probleme nicht habe, kann ich euern Gedanken nicht nachvollziehen. Ich gebe doch mein Workbook frei:

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);

Oder meint ihr noch was anderes ?

27.10.2011 - 20:19 Uhr

Hallo, ich erstelle aus meinem Programm eine Art "XLS Report". Leider wird EXCEL.EXE nicht immer beendet wenn ich die Objekte verwerfe.

Als Bsp. hab ich 10 Reports nacheinander erstellt, hinterher liefen noch 4 von 10 EXCEL.exe im Task Manager.

Hat jemand eine Idee?


        public void CreateExcel()
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            Excel.Range range;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.ApplicationClass();

            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            xlApp.ActiveWindow.DisplayGridlines = false;
            xlApp.DisplayAlerts = false;

            ................CONTENT.................

 
            xlWorkBook.SaveAs(filename + ".xls", Excel.XlFileFormat.xlExcel8, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(false, misValue, misValue);
            xlApp.Quit();

            //Release Used Objects
            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch
            {
                obj = null;
            }
            finally
            {
                GC.Collect();
            }
        }
        #endregion
27.10.2011 - 15:27 Uhr

Ok, das Problem wurde erkannt - Jedenfalls indirekt!

Nach einigen Tests mussten wir feststellen das gleiche Code im .net Framework 4.0 zum positiven Ergebnis führt. Da wurde die System.dll aber stark verbessert 🙂

Wer hätt´s gedacht ?(

26.10.2011 - 23:14 Uhr

Die Parameter stimmen, der Login scheint auch zu funktionieren!

Verglichen zum Browser Login ist bei meiner Anwendung nur der Response anders.

Ich bin mir ziemlich sicher das der Login funktioniert weil die Website mit einem 302 Redirect antwortet wenn der Login erfolgreich war. Und das ist hier der Fall. Testweise habe ich natürlich auch mal ein falsches Passwort angegeben - Hier wird man nicht redirected.

Kann man mit Wireshark soweit sehr gut nachvollziehen...

26.10.2011 - 11:34 Uhr

Hmm das hört sich schonmal interessant an. In wie fern hattest du Probleme mit den Cookies? Der Cookie Count beträgt 3, was in diesem Fall richtig ist.

AllowAutoRedirect = false; -> Hm.. dann hast du dich manuell um das Folgen der Seiten, falls man redirected wird, gekümmert?

Edit 1: Hast du vielleicht ein bisschen Quelltext zu Punkt 1?

Edit 2: Punkt 2 hilft mir leider nicht weiter.

26.10.2011 - 00:14 Uhr

Hallo,

Für einen Kunden arbeite ich zur Zeit an einem kleinen Projekt (Desktoptool) mit dem es möglich sein soll seine drei Websites zu administrieren.

Schritt 1: Login Website -> Hier liegt auch schon das Problem

Auf zwei seiner Websites funktioniert der Login problemlos! Zur Überprüfung ob der Login geklappt hat, suche ich im Response Quelltext das Schlagwort "logout".

Auf der dritte Seite klappt der Login nicht, jedenfalls bekomme ich einen "nicht eingeloggten" Response Quelltext zurück.

Leider kann ich seine Websites hier nicht posten, deshalb die Frage ob jemand aus dem Stand ne Idee zu meinem Problem hat.

Natürlich gibts auch ein bisschen Quelltext:


                string URL = "http://www...";
                string Parameters = "username=Admin&password=xxxx&login=1";

                HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
                HttpWebResponse webResponse;

                webRequest.Method = "POST";
                webRequest.UserAgent = "Opera/9.80 (Windows NT 6.1; U; de) Presto/2.5.22 Version/10.51";
                webRequest.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
                webRequest.Headers.Add("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
                webRequest.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.KeepAlive = true;
                webRequest.AllowAutoRedirect = true;
                webRequest.Referer = URL;
                webRequest.CookieContainer = CookieManager;

                StreamWriter sw = new StreamWriter(webRequest.GetRequestStream());
                sw.Write(Parameters);
                sw.Close();

                webResponse = (HttpWebResponse)webRequest.GetResponse();

                StreamReader sr = new StreamReader(webResponse.GetResponseStream());
                return sr.ReadToEnd();
            }
        
24.10.2011 - 23:00 Uhr

Hey, vielen Dank erstmal für die Links. Ich hab nochmal genauer hingeschaut und mir ist aufgefallen das ich die Datenbank Verbindung nicht richtig geschlossen habe. Das hatte zur Folge das der ConnectionPoolCount immer weiter gestiegen ist und somit das Maximum schnell erreicht wurde.

Vielen Dank nochmal an alle 👍

24.10.2011 - 21:29 Uhr

Naja, ich bin jetzt nocht nicht wirklich weiter gekommen also möchte ich nochmals auf folgendes eingehen:

Das lässt sich nur vermeiden wenn du entweder auf einen Server umsteigst, oder den DB Zugriff wieder in einen Thread bündelst ( SyncQueue ).

Wie mach ich das? Eine Abfrage via Invoke.Required würde hier nicht funktionieren weil es der Datenbank egal ist welcher Thread drauf zugreift oder?

20.10.2011 - 13:12 Uhr

Naja, komisch .. in Delphi habe ich das selbe schonmal gemacht und es gab nie Probleme. (Gleiche FB Version)