Laden...

Forenbeiträge von fichz Ingesamt 26 Beiträge

28.07.2022 - 11:46 Uhr

Hallo,

siehe Zeile 12 im Codeblock #2.

LG

14.06.2022 - 10:13 Uhr

Ich beschwere mich nicht, da man - wie du sagst - die Eigenheiten kennen und dann dementsprechend reagieren muss. Und ich verstehe jetzt auch den Hintergrund warum json verwendet wird, wenn es dann wirklich gewisse Dinge einfacher macht.

Ich dachte halt, dass hier VS eventuell einen Mechanismus eingebaut hat, dass solche Zeichenfolgen einfach nicht escaped werden (oder eine Option zum Aktivieren ob man das will oder nicht). Auch wenn es json ist will vermutlich kein Entwickler, dass die Programmparameter escaped werden.

Für solche "Komfort"-Funktionen hat man ja mMn. auch eine Entwicklungsumgebung wie VS welchen einen gewisse Dinge abnimmt.

LG
fichz

EDIT: Nach dem Posten erst den Post von dir gesehen Abt. Ok dann war ich ja vermutlich mit meiner Annahme recht, dass dies so nicht sein sollte. Aber gut, dass dies in Zukunft ja wahrscheinich behoben wird 🙂

14.06.2022 - 06:53 Uhr

Hallo Abt!

Mit / funktioniert es nun, danke für den Hinweis!

Aaaaber:
Wenn es nichts mit .Net zu tun hat, hat es etwas mit Visual Studio zu tun. Denn irgendwer hatte ja die Idee json als Dateiformat für Startparameter beim Debuggen zu verwenden.
Und da finde ich (ist nur meine Meinung), wenn es keinen triftigen Grund dafür gibt - oder die Vorteile so überwiegen - dieses Format eventuell nicht das Beste ist. Denn es gibt ja noch andere Zeichenfolgen welche escaped werden könnten.

LG

13.06.2022 - 14:41 Uhr

Naja das mag schon sein wenn die Anwendung dann später released wird, aber ich will meine Anwendung ja auch debuggen.
Gibt es hier keine Möglichkeit?

Ich habe mir die "launchsettings.json" nun angesehen (kannte ich vorher noch nicht). Da steht es ja auch korrekt drin:


{
  "profiles": {
    "Profilname": {
      "commandName": "Project",
      "commandLineArgs": "-x:\"C:\\Visual Studio\\VS2022\\Test\\bin\\Debug\\net6.0\\diexmldatei.xml\""
    }
  }
}

Arbeitet ein FW 4.6 Projekt da generell anders?

LG

13.06.2022 - 14:16 Uhr

Hallo zusammen,

langsam fange ich an an mir selbst zu zweifeln...
Ich habe mich das erste mal an ein Net6 Projekt gewagt, da es eine kleine Konsolenanwendung werden soll und es als "Kennenlernen" ganz gut ist.

Das Programm soll einen Dateipfad (Pfad zu einer XML-Datei) als Parameter erhalten. Leider wird hier diese Datei "escapt" weil im Pfadnamen \n vorkommt.
Im Detail sieht der Pfad so aus:
C:\Visual Studio\VS2022\Test\bin\Debug\net6.0\diexmldatei.xml

Als Argument (Project - Projektname.Properties - Debug - General - "Open debug launch profiles UI") habe ich folgende Zeichenfolge eingegeben:
-x:"C:\Visual Studio\VS2022\Test\bin\Debug\net6.0\diexmldatei.xml"

Nach dem Start wird dieses Argument leider zu
"-x:C:\Visual Studio\VS2022\Test\bin\Debug**\n**et6.0\diexmldatei.xml"

Nun erhalte ich immer einen Zeilenumbruch nach dem Debug (aufgrund \n)

Bei einem FW 4.6 Projekt wird der Pfad in den Argumenten korrekt zurückgegeben:
"-x:C:\Visual Studio\VS2022\Test\bin\Debug\net6.0\diexmldatei.xml"

Hatte schon jemand dieses Phänomen bzw. finde ich irgendwie auch keinen Ansatz das zu korrigieren...

LG
fichz

02.06.2022 - 16:09 Uhr

Hallo Abt,

ich habs mir fast gedacht, dass es nicht so einfach funktioniert.
Dachte wenn es einen (einfachen) Mechanismus gegeben hätte, dann könnte ich es auf diesen Weg machen.

Denke, dann werde ich die Datenbankstruktur analysieren und schauen wieweit diese sich ändern lässt, damit man FK erstellen kann.

Danke für die Info!

LG
fichz

02.06.2022 - 14:08 Uhr

Verwendetes Datenbanksystem: EF6 - SqlServer

Hallo zusammen,

im Netz habe ich dazu bereits gesucht aber nicht so richtig das passende gefunden.
Mein Problem ist folgendes:
Ich arbeite mit einer verhältnismäßig großen SQL-Server Datenbank welche vor Jahren von einem alten VB6 Programm übernommen wurde und leider nur PKs hinterlegt hat. Aktuell werden zum Lesen der Daten SqlDataReader und zum Schreiben normale SqlCommands verwendet. Ich kann die aktuelle Datenbankstruktur leider nicht ändern, da ich da in Gefahr laufe, dass das Programm nicht mehr korrekt funktioniert. Nun will ich das Programm trotzdem nach und nach auf EF6 (ist ein FW 4.5 Projekt) umstellen - Bedeutet: Wenn in einem Bereich eine Änderung notwendig ist - versuche ich bei Datenbankzugriffen diese auf EF anzupassen.

Mir ist bewusst, dass ich EF nicht in vollen Zügen genießen kann - aber gerade bei den Lese-/Schreibvorgängen wäre alles typsicher und leichter zu handeln.

Wie in einem anderen Projekt will ich hier auch das UnitOfWork Pattern verwenden und kann somit schön gegen Repositories arbeiten.

So nun zum Problem:
Es gibt in meinen Datenklassen keine Navigation Properties, da es auch keine Foreign Keys gibt. Habe ich nun trotzdem irgendwie eine Möglichkeit eine Navigation Property zu erstellen, ohne dass ein FK nötig ist (und auch von EF NICHT erstellt wird)? Der PK wäre in mehreren Tabellen gleich, besteht aber teilweise aus 5+ Feldern. Natürlich könnte ich nun den Eintrag aus Tabelle A lesen und mit den Keyfeldern eine erneute Abfrage in Tabelle B machen. Da es aber aktuell teilweise Abfragen mit mehreren Joins sind wäre hier der Overhead mMn. zu groß.

Ziel wäre, dass ich dann in der Datenklasse A per Include/Join dann auf Daten in Klasse B zugreifen kann und somit nur eine Abfrage an den SqlServer sende.

Ich hoffe, ich konnte mein Problem soweit schildern, dass man es versteht. Falls nicht bringt ich gerne noch Beispiele mit den aktuellen Datenklassen.

LG
fichz

14.10.2021 - 13:11 Uhr

Hallo Bernd,

ja genau sowas in der Art werde ich auch basteln. Würde für den Zweck den ich benötige allemal ausreichen 🙂

LG
fichz

14.10.2021 - 11:02 Uhr

Hallo,

ok dann werde ich mir mal MailKit zu Gemüte führen und eine einfache "Versende-Form" basteln.

Danke an alle 🙂

LG
fichz

14.10.2021 - 09:41 Uhr

Das mit dem SmtpClient wusste ich nicht - gut zu wissen.

Ja genau nur ein Fenster wo man auf "Senden" drücken kann und die Mail wird gesendet. Der Inhalt (Betreff, Body, Anhang, ...) wird vor befüllt und es muss nur mehr der Empfänger ergänzt werden.
Da in so einer Form ja doch ein bisschen Logik dahintersteckt (Anhang hinzufügen usw.) dachte ich eventuell, dass es bereits etwas "fertiges" in dieser Art geben könnte.

Wenn nicht, dann wird es mir eh nicht ausbleiben es selbst zu basteln 🙂

LG
fichz

14.10.2021 - 09:02 Uhr

Hallo Leute,

aktuell versende ich in einem Programm diverse E-Mails über den Outlook Client (früher über die Redemption.dll). Teilweise werden diese im Hintergrund gesendet (auch über Outlook) und ab und zu erscheint eine vor befüllte "Neue Mail" Form - inkl. Anhang - von Outlook wo der User den Empfänger noch angeben muss.

Nun ist es so, dass Outlook nicht mehr installiert wird sondern nur mehr über die Webanwendung von Office 365 erreichbar ist. Somit kann ich die Outlook Komponente nicht mehr verwenden.

Das Versenden der E-Mails im Hintergrund ist ja kein Problem, da ich dies über den SmtpClient lösen kann, da ich ja alle Daten, welche ich benötige, kenne. Leider funktioniert die "Neue Mail" Form nicht - da ja Outlook nicht mehr existiert.

Meine Frage ist nun ob es eventuell bereits Komponenten gibt - am Besten gratis/Open Source - welche ich von einem C# Programm aus ansteuern kann damit so eine "Neue Mail" Form - wie bei Outlook - aufpoppt.

Falls es so etwas nicht geben sollte bleibt mir eh nix anderes übrig so etwas selbst zu entwickeln. Wenn aber bereits jemand eine stabile Komponente kennt welche das erfüllt könnte ich mir das natürlich sparen.

LG
fichz

28.07.2021 - 13:35 Uhr

BhaaL's Argumentation unterstreicht eigentlich genau meine Gedanken, dass interne mycsharp.de-Links eventuell im gleichen Fenster bleiben aber externe Links in einem neuen Tab geöffnet werden.
Würde ich persönlich für eine gute Möglichkeit halten (oder halt generell alles in einem neuen Tab).

LG
fichz

27.07.2021 - 17:03 Uhr

Hi!

Ich weiß nicht ob es nur mir so geht, aber ich falle immer wieder darauf rein, dass ich Links in den Beiträgen "normal" anklicke und somit mycsharp.de verlasse und auf die geklickte Seite wechsle. Ich muss also immer entweder Rechtsklick -> in neuem Fenster öffnen oder mit der mittleren Maustaste klicken um weiterhin auf mycsharp.de zu bleiben.

Ist das bewusst so gemacht, dass Links nicht in einem neuen Fenster/Tab geöffnet werden? Oft befinden sich ja gleich mehrere Links in einem Beitrag und wenn man da nicht daran denkt muss man immer wieder auf zurück klicksen.

Noch dazu sieht ja das Standard-Logo neben dem Link (wenn es kein mychsarp, stackoverflow, etc. Link ist) auch so aus als würde sich ein neues Fenster/Tab öffnen.

Kann man das eventuell einstellen (per User) oder eventuell generell ändern?

LG
fichz

25.09.2019 - 09:50 Uhr

Bezüglich Design-Pattern stieß ich einmal auf diese Seite, wo wie ich finde einige Pattern sehr gut am Beispiel erklärt werden:

https://www.philipphauer.de/study/se/design-pattern.php

Vielleicht hilft es dir.

LG

23.05.2019 - 07:23 Uhr

Guten Morgen!

Werde mir den FluentMigrator und das mit den DACPAC-Files mal genauer ansehen. Die Lösung von Redgate eventuell auch, aber was ich gesehen habe wäre diese nicht freeware - somit mal hinten anreihen 😃

Besten Dank für die Infos!

LG

22.05.2019 - 11:39 Uhr

verwendetes Datenbanksystem: MSSQL

Hallo,

ich würde gerne wissen wie ihr eure Datenbanken verwaltet bzw. Änderung am Schema (neue Spalte in Tabelle X, neue Tabelle, ...) vornehmt.

Ich habe ein Projekt mit dem ich den Datenbankzugriff über Dapper an eine SQL-Server Datenbank durchführe. Bei Entity Framework gäbe es ja Migrations, aber wie löst man so was ohne Entity Framework am Besten? Hättet ihr hier eventuell ein paar Tips/Anregungen?

Lg

26.11.2018 - 12:36 Uhr

Hallo Abt!

Werde ich mir bei Gelegenheit mal ansehen, kann ich aber wahrscheinlich in diesem Fall noch nicht machen, da hier etwas Zeitdruck herrscht.

Zur 3-Schichten-Architektur hätte ich aber noch Fragen:

Ich habe jetzt ein .Data - Projekt für den DAL und ein .Service - Projekt für die BL erstellt.
Irgendwie habe ich aber Schwierigkeiten wo ich nun meine konkreten Klassen implementieren soll/muss.

Speziell:

  • Datenklassen (POCOs) -> Data?
  • Repositories -> Service?
  • Implementierung des UnitOfWork?

Ist der BL nur dazu da die Daten aus dem Data-Projekt zu lesen/speichern - quasi als Schnittstelle?

Stehe hier ein wenig auf dem Schlauch...

lg fichz

26.11.2018 - 10:58 Uhr

Hallo Abt!

Das mit den asynchronen Abfragen werde ich natürlich beherzigen.

Dann werde ich eine Daten + Business Schicht (Projekte) erzeugen wo dann die unterschiedlichen UI-Projekte gemeinsam drauf zugreifen können.

Danke für die prompte Antwort!

lg
fichz

26.11.2018 - 10:20 Uhr

Guten Tag,

ich habe eine Frage zur Projekt Architektur meines nächsten Projektes und würde mir gerne euren Rat bzw. eure Erfahrungswerte dazu anhören.

Folgendes ist gegeben/gewünscht:
Ich soll eine Webapplikation erstellen wo simple CRUD-Funktionen zur Verfügung stehen sollen. Die Daten werden über einen SQL-Server bereitgestellt und zurückgespeichert.
Das Problem: Der Wissenstand damit ich eine Webapplikation erstellen kann reicht leider noch nicht aus - Schulung wird folgen.
Da die Applikation aber nur intern laufen soll und dies auf einem Windows Tablet sein wird die Applikation vorerst als Desktop Anwendung erstellt.

Ich will nun das Projekt so anlegen, dass ich zuerst die Desktop Applikation erstelle und später, wenn ich genug "Web-Fit" bin, zusätzlich (auch für mich als "Übung") eine Webapplikation hinzufüge.

Meine Idee wäre nun:
Die Projektmappe enthält

  • eine Klassenbibliothek wo der komplette Datenzugriff stattfindet. Speziell will ich das über das Repository Pattern lösen
  • ein Windows Forms bzw. WPF-Projekt welches die Desktop Applikation darstellt und auf die Klassenbibliothek für den Datenzugriff zugreift
  • später dann ein ASP - MVC Projekt welches auch auf die gleiche Klassenbibliothek zugreift und dies dann halt als Webapplikation ausgeführt werden kann

Ist dieser Ansatz OK oder empfehlt ihr hier einen anderen/besseren Weg?

Falls noch etwas unklar ist bitte einfach fragen.

lg
fichz

05.06.2018 - 09:19 Uhr

Denke damit kann ich soweit schon mal was anfangen. Falls ich es mal benötige werde ich mich in die Materie einlesen.

Danke für die Erklärung!

lg

05.06.2018 - 08:21 Uhr

Hallo!

die "Proxy-Lösung" würde mich interessieren da ich über solch eine Problematik auch schon einmal nachgedacht habe. Ich kenne den Begriff "Proxy" jedoch nur aus dem Netzwerkbereich und kann leider in Verbindung mit der Programmierung hier nicht wirklich was anfangen (im Zusammenhang mit dem DB-Problem des TE).

Könntet ihr mir dies bitte im Detail erklären wie man so etwas auf die Beine stellt, bzw. vielleicht gibt es ja auch eine Artikel im Netz der das beschreibt. Ich weiß leider nicht genau wie ich danach suchen muss...

lg

02.05.2018 - 15:52 Uhr

Hallo und danke für die zahlreichen Antworten!

Hangfire werde ich mir bezüglich des Schedulers auf jeden Fall mal ansehen.
Da es mir aber prinzipiell darum ging wie man sich solch eine Architektur aufbaut kann ich mit diesen Antworten schon einiges anfangen.

Ich habe auch das Thema MEF für ein Pluginsystem gefunden was ich denk ich hier gut anwenden kann (hoffe es gibt nichts "aktuelleres").

Danke für eure Hilfe 😁

lg

26.04.2018 - 14:13 Uhr

Hallo Coffeebean,

danke für die Korrektur, nur leider trifft es das auch nicht so recht was ich meine X(
Danke auch für den Link das könnte ich eventuell sogar verwenden für dieses Projekt.

Mir geht es bei meinem Problem aber weniger um die Funktionalität des Schedulers sondern eher um die Architektur.
Vielleicht ist es besser ich erkläre einmal ganz Simple ausgedrückt was ich vorhabe und wie derzeit denke es lösen zu wollen:

Zum Programm:
Ein Scheduler. Führt zu bestimmten Zeitpunkten Aufgaben aus (Was ein Scheduler halt so macht 😄)
Verschiedene solcher Aufgaben können vom Benutzer gespeichert werden (diese werden in einer SQL-Tabelle hinterlegt). Hierzu muss er angeben (vereinfacht):

  • Beschreibung der Aufgabe
  • Wann bzw. in welchem Intervall sie ausgeführt werden soll
  • WAS ausgeführt werden muss (Aufgabentyp) - Wird in Form einer ComboBox zur Auswahl stehen

Mit geht es konkret um das WAS wo ich mein Problem sehe. Dies kann z.B. eben sein, dass einfach nur eine Batchdatei gestartet werden soll (Typ BatchAufgabe) oder halt auch eine Datei von einem FTP-Server geladen wird (Typ FtpDownloadAufgabe). (Es wird oft passieren, dass neue Aufgabentypen zu einem späteren Zeitpunkt hinzugefügt werden müssen. Als Beispiel fällt mir jetzt spontan ein: Es muss eine Log-Datei alle 10 Minuten analysiert werden und bei einem Fehler soll eine E-Mail versendet werden (LogAnalyseAufgabe))

Diese unterschiedlichen Aufgabentypen muss ich ja auch in der Datenbank speichern damit diese beim nächsten Start wieder laden kann.

Mein Lösungsgedanke:
Diese verschiedenen Aufgabentypen werden in Form einer Klasse dargestellt. Um diese gleich behandeln zu können war meine Idee, alle ein Interface implementieren zu lassen damit es dem Scheduler ja egal sein kann welcher Typ sich wirklich dahinter verbirgt. Der Scheduler muss es nur starten (Perform/PerformAsync). Erweiterbar wäre das Ganze dadurch ja auch, falls neue Aufgabentypen dazu kommen. Da kam mir der Gedanke mit einem Pluginsystem, dass ich theoretisch einen neuen Aufgabentyp in Form einer neuen dll in ein Pluginverzeichnis lege und diese vom Programm dann erkannt wird (darum vielleicht der etwas irreführende Titel des Threads)

Dass der Scheduler seine Arbeit verrichtet ist wie gesagt nicht das Problem. Mein Problem liegt eigentlich darin, dass wenn das Programm gestartet wird, die Aufgabeneinträge aus der Datenbank gelesen werden und ich ja irgendwie Instanzen der einzelnen Aufgabentypen erstellen muss. Doof gesagt: Wie weiß mein Programm, dass Aufgabe 2 eine FtpDownloadAufgabe ist und eine neue FtpDownloadAufgabe-Instanz erstellt werden muss.

Hoffe ich konnte es so ein wenig besser erläutern wo mein Problem liegt. Vielleicht ist mein Lösungsgedanke ja auch falsch und ihr könnt mir vielleicht sagen wie man sowas in der Art besser umsetzen kann.

lg
fichz

24.04.2018 - 16:13 Uhr

Hallo Leute,

mir ist leider kein passender Titel eingefallen darum versuche ich mein Problem hier etwas zu erläutern:

Es soll ein Scheduler erstellt werden welcher zu bestimmten Zeitpunkten "Tasks" starten soll.
Diese verschiedenen "Tasks" werden in einer Datenbank - SQLServer - gespeichert.

Solch ein Task beinhaltet unter anderem die Felder wie Id, Beschreibung, Timestamps, Parameter, etc..
Diese Task können unterschiedliche Funktionen ausführen:- Starten einer Batchdatei (.cmd) (kann unter Umständen zusätzliche Parameter beinhalten)

  • Download einer Datei eines FTP-Servers (benötigt Usernamen und Passwort)
  • Auswerten einer Logdatei (Pfad zur Logdatei)
  • Versenden eines E-Mails (E-Mail EMpfänger, Betreff, ...)

Alle diese Funktionen müssen ein Interface (IFunction) implementieren welches im Prinzip nur 2 Member beinhaltet:


public interface IFunction
{
	string Description { get; }
	Task PerformAsync();
}

Eine Implementierung dieses wäre zB.:


public class DelayedTestFunction : IFunction
{
	public string Description
	{
		get { return "Testfunktion mit einem Delay von 3 Sekunden"; }
	}

	public async Task PerformAsync()
	{
		await Task.Delay(3000);
		System.Diagnostics.Debug.Print("Testfunktion");
	}
	
}

Das Hauptprogramm hält nun eine Liste mit IFunctions und führt diese dann zu bestimmten Zeitpunkten aus.

Nun zum Problem:
Wie kann ich diese Tasks in der Datenbank abspeichern, damit ich diese dann auch wieder laden kann?
Genauer gesagt wie weiß ich, dass z.B.: der Task mit der ID 1 eine "BatchFunction" ist damit ich dieser auch beim Instanziieren die notwendigen Parameter mitgeben kann? Sollte ich hier eine Art Factory erstellen welche anhand eines Identifiers diese erstellt?


public static class FunctionFactory
{
	public static IFunction GetFunction(int id, string parameter)
	{
		switch(id)
		{
			case 1:
				return new DelayedTestFunction();
			case 2:
				return new BatchFunction(parameter);
			default:
				throw new ArgumentException("nix gefunden");
		}
	}
}

Am schönsten wäre es ja, wenn eine neue Funktion hinzugefügt wird, diese ohne große Änderungen/Anpassungen verwendet werden kann.
Gibt es für diese Art "Problem" eine saubere Lösung bzw. eine Art Standard wie man so etwas umsetzen sollte??

Falls noch etwas unklar sein sollte bitte einfach fragen.

lg
fichz

17.04.2018 - 12:52 Uhr

Wenn die Textbox.Text Property per Binding an das Viewmodel gebunden ist geht auch einfach

<Textbox Text="{Binding YourProperty, Delay=500}" />

EDIT: http://www.jonathanantoine.com/2011/09/21/wpf-4-5-part-4-the-new-bindings-delay-property/

lg