Benutzer mit den meisten Antworten
VSTO Outlook Add in | VS17 führt Code beim öffnen der Datein in VS aus?

Frage
-
Hallo!
Ich habe gerade das kurioseste seid langem.
Ich bin gerade dabei ein VSTO Addin für outlook zu schreiben welches hauptsächlich Daten von einer mysql auslest und wieder zurückschreibt.Mittlerweile habe ich aber das Problem, dass sich aus welchem Grund auch immer wenn ich z.B. ein Form in VS17 aufmache der dahinterliegende Code ausgeführt wird und Fehlermeldungen gibt welche nicht kommen wenn ich das Programm normal ausführe.
Weiters kann ich gewisse User Controls nicht in Forms einfügen, aus dem selben Grund.Wie komme ich drauf das mein Code im Hintergrund ausgeführt wird?
Sobald ich den gesamten von mir geschriebenen Code auskommentiere kann ich wieder auf jede Datei zugreifen.Wenn vielleicht irgendwer einen Tipp hat nach was ich da am besten bei Mr. Google suchen könnte und noch besser vielleicht kennt jemand das Problem und hat einen Lösungsvorschlag?
Connection String zur DB:
Driver={MySQL ODBC 5.3 Unicode Driver};Server=192.168.16.192;Database=technet;User=technet;Password=technet;Option=3;
Lerchner Felix
- Bearbeitet Chaftalie Donnerstag, 30. August 2018 13:49
Antworten
-
Hi Felix,
Ursache Deines geschilderten Problems scheint mir in einem Programmfehler zu liegen.Der Designer im Visual Studio erzeugt für die Anzeige der Form eine Instanz. Dabei arbeitet er natürlich den Code aus dem Designer-File ab. Wenn dieser Code andere Codestücken von Dir aufruft, z.B. bei mit dem Designer erzeugte Verbindungen zu Datenzugriffsschichten/-Klassen, die aber fehlerhaft sind, dann wird das Formular nicht angezeigt und ggf. ein etwas irreführender Fehler ausgewiesen. Das kann z.B. der Fall sein, wenn der ConnectionString nicht zur Entwicklungs-Umgebung passt, z.B. ist der Datenbankserver während der Entwicklung nicht wie angegeben erreichbar.
Lösen kann man das Problem in mehreren Schritten:
1. Eine Dummy-Datenklasse erstellen und für die Bindung nutzen, um Probleme des Zugriffs auf den Datenbankserver auszuschließen.
2. Testprojekt erstellen, welches die Datenzugriffsschicht ohne Formular testet.
3. Den Datenbankabruf unterdrücken, wenn man sich im Design-Mode befindet.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 11. September 2018 07:00
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 21. September 2018 11:13
-
Hallo,
Danke für die Denkanstöße / Lösungsvorschläge.
Ich bin jetzt dank der Erklärung wieso das passiert (auf was ich eigentlich nach 2 Jahren WinForm auch selber drauf kommen hätte können) auf folgende Seiten gestoßen:
Ich habe es bei mir jetzt so gelöst:
private void tmr_250ms_Tick(object sender, EventArgs e) { if (!this.DesignMode) { //Code here... } }
D.h.: in jeder Methode in welcher ich irgendetwas mit Datenbanken mache habe ich den gesamten Code in ein solches if eingeklammert.
Vielleicht werde ich dies ifs mit Compiler Befehlen aus der finalen Version des Programms wieder herausnehmen aus wsl. nicht bemerkbaren Performance Gründen ^^.
Zusatz:
Jede einzelne Methode braucht dieses if, da aus welchem Grund auch immer der Designer nicht nur den Code ausführt der im Programm auch aufgerufen würde, sondern Jede Methode in der Klasse.Vielleicht weiß zu diesem Thema irgendjemand mehr als ich?
Ich werde mich auf jedenfalls noch etwas informieren in diese Richtung und wenn ich etwas spannendes finde hier hinzufügen.
Lerchner Felix
-
Hi Felix,
das ist genau das, was ich Dir geschrieben habe.Nicht jede einzelne Methode braucht die Abfrage nach dem DesignMode, sondern lediglich die Zuweisung der Instanz der Datenzugriffschicht. Für den DesignMode nutzt Du eine Dummy-Datenzugriffsschicht, die Dir Testdaten für die Anzeige im DesignMode bereitstellt. Zu Ausführungszeit nutzt Du dann die dafür vorgesehene Datenzugriffsschicht. Damit es dann so wenig wie möglich Fehler gibt, kann ein Testprojekt hilfreich sein.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 11. September 2018 07:01
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 21. September 2018 11:13
Alle Antworten
-
Hallo Lerchner Felix,
SQLOLEDB ist ein nativer OLE DB-Anbieter. Du kannst er nicht mit OdbcConnection verwenden.
Wenn Du ODBC verwenden möchtest, müsst Du einen Treiber folgendermaßen angeben:
"Driver={SQL Server}"
"Driver={SQL Native Client}"
"Driver={SQL Server Native Client 10.0}"
Dieses Thema wird im folgenden Thread behandelt:
SQL server connectionGruß,
Ivan Dragov
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo,
Ganz schlau werd ich da gerade leider nicht /:
Mein Connectionstring (genau der selbe wie obiger)
Driver={MySQL ODBC 5.3 Unicode Driver};Server=192.168.16.192;Database=technet;User=technet;Password=technet;Option=3;
spricht doch dediziert den ODBC Treiber an oder nicht?
Vor allem das Programm funktioniert ja wenn es kompeliert ist und läuft ohne Fehlermeldungen. (ich fange nirgendwo Fehlermeldungen ab).Das Problem besteht ja nur in VS17 selber. d.h.: Sobald ich das UserControlpanel in ein Form rein mache oder wenn ich ein Form mit einem solchen UserControlpanel aufmache kommen diese Fehler. Es ist weder Outlook im normalen Modus sowie im Debug geöffnet.
Die Fehler kommen von VS17 nicht von meinem Program...
Lerchner Felix
- Bearbeitet Chaftalie Montag, 3. September 2018 07:20
-
Hi Felix,
Ursache Deines geschilderten Problems scheint mir in einem Programmfehler zu liegen.Der Designer im Visual Studio erzeugt für die Anzeige der Form eine Instanz. Dabei arbeitet er natürlich den Code aus dem Designer-File ab. Wenn dieser Code andere Codestücken von Dir aufruft, z.B. bei mit dem Designer erzeugte Verbindungen zu Datenzugriffsschichten/-Klassen, die aber fehlerhaft sind, dann wird das Formular nicht angezeigt und ggf. ein etwas irreführender Fehler ausgewiesen. Das kann z.B. der Fall sein, wenn der ConnectionString nicht zur Entwicklungs-Umgebung passt, z.B. ist der Datenbankserver während der Entwicklung nicht wie angegeben erreichbar.
Lösen kann man das Problem in mehreren Schritten:
1. Eine Dummy-Datenklasse erstellen und für die Bindung nutzen, um Probleme des Zugriffs auf den Datenbankserver auszuschließen.
2. Testprojekt erstellen, welches die Datenzugriffsschicht ohne Formular testet.
3. Den Datenbankabruf unterdrücken, wenn man sich im Design-Mode befindet.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 11. September 2018 07:00
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 21. September 2018 11:13
-
Hallo,
Danke für die Denkanstöße / Lösungsvorschläge.
Ich bin jetzt dank der Erklärung wieso das passiert (auf was ich eigentlich nach 2 Jahren WinForm auch selber drauf kommen hätte können) auf folgende Seiten gestoßen:
Ich habe es bei mir jetzt so gelöst:
private void tmr_250ms_Tick(object sender, EventArgs e) { if (!this.DesignMode) { //Code here... } }
D.h.: in jeder Methode in welcher ich irgendetwas mit Datenbanken mache habe ich den gesamten Code in ein solches if eingeklammert.
Vielleicht werde ich dies ifs mit Compiler Befehlen aus der finalen Version des Programms wieder herausnehmen aus wsl. nicht bemerkbaren Performance Gründen ^^.
Zusatz:
Jede einzelne Methode braucht dieses if, da aus welchem Grund auch immer der Designer nicht nur den Code ausführt der im Programm auch aufgerufen würde, sondern Jede Methode in der Klasse.Vielleicht weiß zu diesem Thema irgendjemand mehr als ich?
Ich werde mich auf jedenfalls noch etwas informieren in diese Richtung und wenn ich etwas spannendes finde hier hinzufügen.
Lerchner Felix
-
Hi Felix,
das ist genau das, was ich Dir geschrieben habe.Nicht jede einzelne Methode braucht die Abfrage nach dem DesignMode, sondern lediglich die Zuweisung der Instanz der Datenzugriffschicht. Für den DesignMode nutzt Du eine Dummy-Datenzugriffsschicht, die Dir Testdaten für die Anzeige im DesignMode bereitstellt. Zu Ausführungszeit nutzt Du dann die dafür vorgesehene Datenzugriffsschicht. Damit es dann so wenig wie möglich Fehler gibt, kann ein Testprojekt hilfreich sein.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 11. September 2018 07:01
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Freitag, 21. September 2018 11:13