Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Palladin007
Thema: SQL2019 - INSERT INTO - Inahlt der Variablen werden als "ungültiger Spatenname" angezeigt
Am Gestern, im Forum: Datentechnologien

Such mal nach "c# sqlcommand insert"
Da findest Du ein Haufen Artikel dazu, wie man mit C# mit einem SqlCommand Daten inserted und die nutzen alle Parameter (zumindest war das bei meinen Stichproben so).

Ich frag mich auch ehrlich gesagt, warum immer wieder so viele Anfänger versuchen, ohne Parameter zu arbeiten.
Das bedeutet ja, dass es irgendwo noch Quellen gibt, die das falsch erklären.
Vielleicht übersehe oder verdränge ich die auch einfach nur :/

Thema: Lable erweitern mit BackcolorChanged Ereignis
Am Gestern, im Forum: GUI: WPF und XAML

Es gibt eine OnPropertyChanged-Methode, die man in einem abgeleiteten Control überschreiben kann.
Und Du kannst in einem abgeleiteten Control auch mit BackgroundProperty.OverrideMetadata() neue Metadaten inklusive PropertyChangedCallback registrieren.
Beides ist aber für die Entwicklung eigener Controls gedacht und sollte nicht missbraucht werden.

Bei WPF macht man es anders herum:
[Artikel] MVVM und DataBinding

Die Background-Property wird sich ja nicht einfach von selbst ändern.
Du solltest also ein ViewModel haben, was dafür sorgt, dass die Background-Property geändert wird und in diesem ViewModel kannst Du dann auch alles weitere tun und lassen, was Du brauchst - z.B. ein BackgroundChanged-Event einbauen.

Für mich klingt das aber eher, als würde irgendwas in deinem Projekt den Hintergrund ändern und irgendwas anderes interessiert sich nicht für den geänderten Hintergrund, sondern für den Grund, warum er sich geändert hat. Also wie als wäre die View eine Art Vermittler zwischen zwei Funktionen - ziemlich unklug, das so zu machen, auch wenn es theoretisch geht.

Thema: SQL2019 - INSERT INTO - Inahlt der Variablen werden als "ungültiger Spatenname" angezeigt
Am im Forum: Datentechnologien

Zitat
Ich quäle mich schon ein paar Tage damit !

Mit Hilfe der Tutorials oder Doku von Microsoft oder einfach ein bisschen Google-Suche hättest Du das Gequäle noch am selben Tag selber beenden können

Thema: Namensliste in csv-Datei Vornamen alphabetisch sortieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Gar nicht - zumindest nicht so direkt in der Datei.
Zum Sortieren musst Du die Liste komplett lesen, dann sortieren und anschließend wieder komplett in die Datei schreiben

Zum lesen bzw. schreiben hilft der CsvHelper
Zum Sortieren die LINQ-Methode Enumerable.OrderBy (Api-Docs)

Thema: Gibt es noch das alte simple SQLite?
Am im Forum: Datentechnologien

Wenn ich da so über die Beispiele scrolle - wo ist der Vorteil gegenüber dem Entity Framework?

Thema: Windows Forms lädt neuen Code nicht
Am im Forum: Rund um die Programmierung

Bereinigung?
Wenn Du einen Rebuild machst, sollte der automatisch einen Clean machen.
Und bei einem normalen Build sollte er das neu builden, was sich geändert hat.
Kann natürlich sein, dass Visual Studio da etwas gezickt hat, daher ...

Fertige Versionen solltest Du aber nicht einfach aus Visual Studio heraus bauen und dann aus dem bin-Ordner kopieren.
Dafür gibt's die publish-Funktion, damit hast Du diese Probleme auch nicht mehr.

Thema: Windows Forms lädt neuen Code nicht
Am im Forum: Rund um die Programmierung

Der Fehler liegt garantiert in deinem eigenen Code, nur verrätst Du davon nichts.
Also wie findet der Build statt und wie updatest Du die Anwendung?

Thema: Testen einer API Wrapper Library
Am im Forum: Rund um die Programmierung

Du testest die externe API mit, das willst Du nicht, denn da ändern sich natürlich die Daten und es ist langsam.
Bei UnitTests willst Du das testen, worüber Du die Kontrolle hast und deine Kontrolle endet bei Refit.

Ich würde also in den UnitTests die Refit-Interfaces mocken, immer so, wie es deine Tests brauchen.
Dann kannst Du performant ohne zuverlässig reproduzierbar deine Tests aufbauen.

By the way:
Guck dir mal xUnit an, ich mag's lieber.

Thema: Entity Framework => MS SQL-Server Tabellenabhängigkeit
Am im Forum: Datentechnologien

Nein, das ist Quatsch.

Du hast eine Delete-Methode, die einen CompletedTask zurück gibt und rufst sie einem neuen Task auf.
Heißt effektiv: Du hast eine synchron arbeitende Delete-Methode, die Du in einen Task steckst und die Beendigung nicht abwartest.
Auch die "Deleted"-Variable ist falsch benannt, denn das ist ein Task.

Wenn Du asynchron arbeiten willst, dann nutze die asynchronen Methoden, die EFCore dir zur Verfügung stellt.
Wenn Du eigene asynchrone Methoden entwickeln willst, solltest Du dich dringend vorher ausführlich damit auseinander setzen, das ist kein leichtes Thema.

Und mir wird auch nicht ganz klar, wie das mit deiner ursprünglichen Frage zusammenhängt.

Thema: Aufgabe in Backend ausführen in ASP .Net Core 6
Am im Forum: Grundlagen von C#

Zitat
Sind Cron-tab's besser, oder sollte man diese IHostedService-Implementierung bevorzugen?
Ist denke ich ziemlich egal.
Ich würde den BackgroundService nutzen, da der auf allen Plattformen gleich läuft und nicht noch separat im OS konfiguriert werden muss.
Zitat
läuft der IHostedService aufm Client oder Server?
Server
Generell läuft jeder C#-Code auf dem Server, außer bei WebAssembly.

Thema: Aufgabe in Backend ausführen in ASP .Net Core 6
Am im Forum: Grundlagen von C#

Zitat
im WWW habe ich IHostedService (StartAsync , StopAsync ) gefunden, aber irgendwo habe ich gelesen das dieses Technologie für kleine Aufgaben seien soll
Irgendwo gelesen?

Es gibt eine IHostedService-Implementierung namens BackgroundService, die ist genau für sowas da.

Thema: Entity Framework => MS SQL-Server Tabellenabhängigkeit
Am im Forum: Datentechnologien

Du gibst nirgendwo eine ID an.
Wenn Du die IDs nicht generieren lässt, musst Du sie selber angeben.
Oder Du lässt sie generieren:

https://docs.microsoft.com/en-us/ef/core/modeling/generated-properties?tabs=fluent-api#explicitly-configuring-value-generation

Thema: Memory Leak beim Indexieren von Dateien - Warum bleibt der DBContext trotz using erhalten?
Am im Forum: Datentechnologien

Zitat von sandreas
Denn der FileSystemWatcher muss ja offen bleiben, um Änderungen zu überwachen

Dann mach ihn zum Singleton und der DbContext bleibt Scoped.
Und nutze es im BackgroundService, wie Abt zeigt, mit einem ServiceScope

Thema: Memory Leak beim Indexieren von Dateien - Warum bleibt der DBContext trotz using erhalten?
Am im Forum: Datentechnologien

Du zeigst nur die Methode, aber nicht, woher der DbContext kommt?

Der DbContext wird üblicherweise als Scoped registriert.
Wenn Du nun einen BackgroundService hast, der einen DbContext im Konstruktor erhält, dann hast Du da eine DbContext-Instanz, die die ganze Zeit mit dem BackgroundService (also Singleton) lebt - ist vielleicht das dein Fehler?
Deshalb verwendet Abt in seinem Code auch die IServiceScopeFactory, denn dann hast Du deinen Scope, der den DbContext managed - z.B. ein Scope nach Zeit X öffnen, arbeiten, schließen

Also zeig nicht nur die Methode, sondern auch woher der DbContext kommt und wie DbContext und BackgroundService registriert werden.

Thema: Enum automatische Zuweisung bei Feldern und Eigenschaften
Am im Forum: Grundlagen von C#

Oder so:


private DayOfWeek? _myDay;

public DayOfWeek MyDay
{
    get => _myDay ?? throw new InvalidOperationException("...");
    set => _myDay = value;
}

Bin ich aber ehrlich gerade kein Fan von ^^

Thema: Ich habe noch immer mit den .NET Core Nachfolgern Probleme
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Nochmal wegen der Vollständigkeit: .NET CLI
Da hast Du dann auch den Compiler - die dotnet.exe macht das alles.


Für mich sieht das so aus, als hättest Du auf gut Glück dotnet heruntergeladen und einfach mal ausprobiert.
Das geht - wie Du ja selber merkst - nicht gut aus, Du solltest dich vorher zumindest in die Grundlagen einarbeiten, Microsoft bietet genug Artikel dazu.

Thema: Logic-DLL universell verwendbar machen (.net 4.8 und .net 6.0)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Dafür ist/war es gedacht.

.NET Standard

Achte aber darauf, dass ihr die 4.8 Projekte auch noch auf 6 zieht.
.NET Standard wird nicht mehr weiterentwickelt, ist also nur eine Übergangslösung.

Thema: Min() zweier Gleitkommazahlen zurückgeben
Am im Forum: Grundlagen von C#

Zitat von Sw4t
Oh man. Float ist ein lästiger Datentyp. Danke dir
Hat nix mit Float zu tun, gilt auch für die anderen Gleitkommazahlen.

Der Compiler sieht ja nur "Zahl" und wenn Du keinen Typ definierst, ist "Zahl" eben ein Int.
Und dass bei Int die Nachkommastellen abgeschnitten werden, ist technisch notwendig und auch gut so.

Thema: Min() zweier Gleitkommazahlen zurückgeben
Am im Forum: Grundlagen von C#

Du übergibst "8/7" und "6/5", also 1 und 1. Überrascht?

5, 6, 7 und 8 sind Int-Werte, wenn Du mit denen rechnest, kommt auch Int raus und Int erlaubt keine Nachkommastellen.

Du musst bei jeder Division mit einer Gleitkommazahl rechnen, damit der Compiler das auch weiß.

Heißt:


float test = Min(8F / 7F, 6F / 5F); 

Mit dem F sagst Du, dass die Zahl ein float ist.
Du kannst aber auch casten und wenn Du Variablen nutzt, die schon float sind, brauchst Du es natürlich auch nicht.

Thema: Binden an DataGrid- DataGrid
Am im Forum: GUI: WPF und XAML

Das geht nicht oder nur sehr, sehr umständlich.

Aber im zweiten Grid zeigst Du doch auch nur die Daten vom SelectedItem des ersten Grids an, warum bindest Du dann nicht gegen die entsprechende Property?


<TextBox Height="20" Width="200" Margin="3" Text="{Binding ElementName=Main_DataGrid, Path=SelectedItem.SelectedCityHouse, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>


Und das gleiche würde ich auch für's erste Grid machen.
Am DataGrid das SelectedItem ans ViewModel binden, dann kannst Du A. aus dem ViewModel heraus das SelectedItem steuern und B. an anderer Stelle einfacher daran binden.

Thema: Ein Neuer - bei C#?!
Am im Forum: Smalltalk

Referenz?
Du meinst, was es alles in den Frameworks gibt?

  • Doku
  • IntelliSense-Hilfe
  • Metadaten (F12 oder Rechtsklick + Definition öffnen)
  • Foren/Blogs, wenn es mal um was Neues geht

Irgendwann ist vieles aber im Kopf.
Ein Buch lohnt sich für den Anfang aber trotzdem - oder Du willst den Einsteiger-Teil aus der MSDN-Doku durcharbeiten.

Thema: Threads async machen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Lies nach, was der Unterschied von "parallel" und "asynchron" bedeutet - ist nämlich nicht das gleiche
Dein Ziel kannst Du mit der Parallel-Klasse erreichen, die ist genau für sowas da.

Außerdem ist dein Code nirgendwo asynchron.
So, wie das geschrieben ist, führst Du die synchron arbeitende Call-Methode (ja, die arbeitet synchron, sollte dir VisualStudio auch mitteilen) jeweils in einem eigenen ThreadPool-Thread aus.

Zitat von DNS46
Jetzt fällt aber auf, dass die Aufrufe von Call(..) gar nicht parallel ausgeführt werden, sondern aufeinander warten.
Was lässt dich das glauben? Die Zeit, die da steht, ist die Zeit, die der Ping braucht und hat nichts mit den Tasks zu tun.
Der Code wird nacheinander gestartet, läuft also schon, wenn Du den Task der Liste hinzufügst
Der Code wird dann jeweils in einem eigenen Thread ausgeführt und unabhängig voneinander ausgeführt.
Zitat von DNS46
Ja und dann kau ich gerade am Schlüsselwort await. Erfüllt WaitAll() hier genau den gleichen Zweck?
Nein.
WaitAll() wartet synchron, bis alle Task fertig sind - in vielen Fällen eine blöde Idee.
WhenAll() ist das asynchrone Gegenstück dazu und sollte bevorzugt werden.

Auf einen Task wartet man mit await, aber dann ist es nicht mehr "parallel" sondern "asynchron".

"Richtiger" asynchron sähe es so aus:


static async Task Main(string[] args)
{
    List<Task<string>> myTasks = new List<Task<string>>();

    foreach (string url in new string[] { "mycsharp.de", "www.google.de", "www.wolframalpha.com" })
    {
        myTasks.Add(CallAsync(url));
    }

    foreach (Task<string> task in myTasks)
    {
        Console.WriteLine(await task);
    }
}

static async Task<string> CallAsync(string url)
{
    Ping ping = new Ping();
    PingReply reply = await ping.SendPingAsync(url, 1000);
    return String.Format("IP: {0}\t=> time: {1}ms\t(url: {2})", reply.Address,reply.RoundtripTime, url);
}
Oder, wie T-Virus vorschlägt:


static async Task Main(string[] args)
{
    List<Task> myTasks = new List<Task>();

    foreach (string url in new string[] { "mycsharp.de", "www.google.de", "www.wolframalpha.com" })
    {
        myTasks.Add(CallAsync(url));
    }

    await Task.WhenAll(myTasks);
}

static async Task CallAsync(string url)
{
    Ping ping = new Ping();
    PingReply reply = await ping.SendPingAsync(url, 1000);
    var message = String.Format("IP: {0}\t=> time: {1}ms\t(url: {2})", reply.Address,reply.RoundtripTime, url);
    Console.WriteLine(message);
}
Keine Garantie, dass es funktioniert, wurde im Browser geschrieben, aber das Prinzip wird denke ich klar.

Damit werden die Tasks in genau der Reihenfolge aus der Liste erwartet und das Ergebnis ausgegeben.
Aber das heißt nicht, dass der Code in der Call-Methode auch genau in der Reihenfolge ausgeführt wird, er wird immer noch in der ersten Schleife gestartet.
Es könnte z.B. sein, dass alle drei Pings nacheinander gestartet werden, der zweite Eintrag ist zuerst fertig, aber auf den ersten Eintrag wird zuerst gewartet, der zweite Eintrag ist dann aber schon fertig und es muss nicht darauf gewartet werden.

Zitat von T-Virus
du kannst mit SendAsync den Aufruf direkt mit einem eigenen Task starten.
Die Methode ist nicht "wirklich" asynchron, sie gibt keinen Task zurück, sondern arbeitet stattdessen mit dem PingCompleted-Event.
Die "richtig" asynchrone Methode ist "SendPingAsync".

Thema: Projekt auf .Net 6.0 upgraden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

... und wenn Du es nicht löschst, gibt's irgendwelche Fehler, wenn Du auf .NET 6 umstellst?

Ein naheliegender Schritt wäre ja, genau diesen Fehlern auf den Grund zu gehen

Thema: Projekt auf .Net 6.0 upgraden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von schorge
ist es möglich in einer Projektmappe Frameworks zu mischen?
.NET 4.8 und .NET 6 sind nicht kompatibel untereinander.
Zitat von schorge
alle Forms löschen und von NET Framework 4.8 auf .NET Standard 2.0 umstellen?
WinForms gibt's nicht für .NET Standard, das wird dir also nichts bringen.

WinForms gibt's für .NET 6, wenn etwas bei dir nicht läuft, liegt das an deinem Code.
Um diese Fehler musst Du dich natürlich kümmern, also schau nach, was das Problem ist und überleg dir, wie Du das beseitigst.

Thema: Visual Studio 2022 gibt Fehlermeldung aus
Am im Forum: Grundlagen von C#

Visual Studio ist sehr komplex und bietet sehr viele Tools, gäbe es eine Standard-Installation, würde es Beschwerden wegen voller Datenträger hageln.
Deshalb gibt es den Installer, über den mann genau einstellen kann, was man haben möchte - oder man ändert seine Einstellung nachträglich.

Starte also nochmal den Installer und ändere die Installation, es sollte eine Kachel-Übersicht mit verschiedenen Technologien zu sehen sein.
Für dich entscheidend ist ".NET desktop development".

Thema: Visual Studio 2022 gibt Fehlermeldung aus
Am im Forum: Grundlagen von C#

Was für ein Profil?

Du hast das Projekt anhand des Templates "Console App" (nicht "Console App (.NET Framework)") erstellt?
Was hast Du danach noch gemacht?

Thema: Ein Neuer - bei C#?!
Am im Forum: Smalltalk

Zitat von islander
wenn es denn noch Zukunft hat.

Hat es - mehr denn je

Thema: C# 8 Nullable reference types - Pro & Con
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich persönlich würde immer mit <TreatWarningsAsErrors>true</TreatWarningsAsErrors> arbeiten.
Wenn manche Warnungen gar nicht beachtet werden sollen, kann man sie immer noch in der EditorConfig abschalten - dank Git kann man dann aber auch hervorragend nachlesen, wer da was nicht sehen will.
Oder man deaktiviert die Warnungen einzeln im Code - samt Begründung natürlich.

So mache ich das (wenn ich denn darf) auch: Warnung = Fehler und wenn der Code Absicht ist, wird die Warnung je Situation unterdrückt.

Thema: C# 8 Nullable reference types - Pro & Con
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich merke, wir sind uns einig
Das heißt zumindest, dass meine Ansicht nicht so falsch sein kann - man sollte bei so Grundsatzdiskussionen ja bereit sein, den Fehler bei sich selbst zu suchen.
Und TreatWarningsAsErrors=true versuche ich auch noch durchzusetzen, es gibt ja leider immer noch Leute, die Warnungen ignorieren.

Zitat von gfoidl
Und es ist hinlänglich bekannt, je früher ein Fehler erkannt / behoben wird, desto weniger Kosten wurden dadurch verursacht.
Das ist ein guter Punkt, daran hatte ich noch nicht gedacht - danke dafür.
Zitat von gfoidl
Hier liegt mMn bei vielen ein Verständnisfehler vor.
Und dem werde ich auch mal nachgehen, da das Thema vorher scheinbar niemandem bekannt war (was ich auch irgendwie bedenklich finde)

Thema: C# 8 Nullable reference types - Pro & Con
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Abt
warum NRT passiv implementiert wurden, und wieso null immernoch als Value möglich ist
Neben der Backward Compatibility ist null mMn. auch noch ein durchaus vernünftiger "Wert", WENN alle Beteiligten wissen, dass null erlaubt ist - naja und wenn es inhaltlich sinnvoll ist, aber das sagt sich so leicht.

Das ist auch das für mich wichtigste Argument:
Das Feature ist ein (wenn auch technisch nicht ausschlaggebender) Teil der Member-Definition.
Jeder weiß, was null sein darf und was nicht, man muss nicht erst den Code absuchen.
Zitat von Abt
Die Kolleg:innen kann man eigentlich super einfach überzeugen: es ist eine geschenkte Compiler Hilfe, stabileren Code zu schreiben.
Hat leider nicht geholfen

Gegenargument:
Man sollte einfach pauschal immer davon ausgehen, dass es null sein kann und entsprechend darauf prüfen.
Wenn ein Entwickler vom Compiler darauf hingewiesen wird, auf null zu prüfen, dann setzt der ggf. ein sinnloses Default-Verhalten (oder Werte) um, die dann erst irgendwann später als Logik-Fehler auffallen. Im schlimmsten Fall landet so ein unsinniger Default-Wert in der DB und sorgt für Stress, den da wieder raus zu kriegen.
So betrachtet ist es besser, dass es in eine NullReferenceException rennt, sofort auffällt und dann auch leicht(er) zu finden ist, als ein Logik-Fehler.
(Inhaltliches Zitat: Kollege)