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 thomas.at
Thema: CSV bearbeiten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo

Ich würde das mit einem StingBuilder und zwei geschaltelten Schleifen machen:


      StringBuilder sb = new StringBuilder();
      int spalte11;
      string spaltezusatz = string.Empty;

      string[] zeilen = File.ReadAllLines(Textdatei);
      sb.AppendLine(zeilen[0] + ";Zusatzspalte");  //Headerzeile

      for (int zeile = 1; zeile < zeilen.Length; zeile++) //alle Zeilen ab 2. Zeile
      {
        spaltezusatz = string.Empty;
        string[] Spalten = zeilen[zeile].Split(';'); // Zeile zerlegen
        for (int spalte = 0; spalte < Spalten.Length; spalte++) // alle Spalten durchlaufen
        {
          if (spalte == 13)  // Spalte 13
          {
            if (Spalten[spalte] == "30") // Wert
            {
              if (Int32.TryParse(Spalten[11], out spalte11) && spalte11 ≤ 160) // Wert aus Spalte 11 umwandeln und auf ≤ 160 prüfen
                spaltezusatz = name10[spalte11]; // Wert aus name10 in "Zusatzspalte"
            }
            else
            {
              if (Spalten[spalte] == "10")
              {
                if (Int32.TryParse(Spalten[11], out spalte11) && spalte11 ≤ 43) // w.o.
                  spaltezusatz = name30[spalte11];
              }
              else
              {
                MessageBox.Show("Fehler");
              }
            }
          }
          sb.Append(Spalten[spalte] + ";");
        }
        if (!string.IsNullOrWhiteSpace(spaltezusatz )) // zusatzspalte gesetzt
          sb.AppendLine(spaltezusatz ); // zur Zeile hinzufügen
        else
          sb.AppenLine("");
      }
      File.WriteAllLines(Pfad, sb.ToString()); // Zeilen schreiben

LG
Thomas

Thema: ASP.NET Core Web-API File download
Am im Forum: Web-Technologien

Hallo

Danke an alle. Ich habe das jetzt über FileStreamResult, wie david.m im zweiten Link erwähnt hat, gelöst.

P.S.
Natürlich gibt es Prüfungen bezüglich Berechtigungen, ob das File überhaupt existiert usw. Diese habe ich aber nicht mit angegeben, da sie ja für die Frage nicht relavant sind.

mfG
Thomas

Thema: ASP.NET Core Web-API File download
Am im Forum: Web-Technologien

Hallo

Ich habe eine ASP.NET Core Web-API die ich auf Version 6 umstellen soll. In dieser ist in einem Controller folgende Methode:


    [HttpGet]
    public async Task<IActionResult> GetDocument(string datei)
    {
      if (!ModelState.IsValid)
        return BadRequest(ModelState);
      try
      {
        WebClient client = new();
        client.Credentials = CredentialCache.DefaultNetworkCredentials;
        Task<byte[]> t = client.DownloadDataTaskAsync(new Uri(datei));
        await t;
        var file = t.Result;
        return File(
          file,
          new ContentTypes().GetContentType(datei),
          "_File" + Path.GetExtension(datei).ToLowerInvariant());
      }
      catch (Exception ex)
      {
        return BadRequest(ex.GetAll());
      }
    }

Der String für die Datei sieht wie folgt aus:

 \\Server\Share\Directory\Filename

Jetzt meldet mir das System. dass "WebClient" deprecated ist und ich "HttpClient" statt dessen verwenden soll.
Nur erlaubt mir dieser nicht, eine Uri im Format "file://...." zu verwenden. Auch meine Recherche im Internet
hat mir keine Erkentniss darüber gebracht, wie ich dieses Problem lösen kann. Vielleicht habe ich nach den falschen Stichwörtern gesucht.
Kann mir vielleicht einer von Euch hierzu einen Tipp geben?

mfG
Thomas

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Hallo

@dr4g0n76

Ich habe den Link eigentlich deshalb gepostet, vielleicht kannst Du hier Dir etwas abschauen, wie da die Berechnung gemacht wird, ob der Text gekürzt werden muss oder nicht. Daraus müsste sich doch dann ergeben, ob der Text ins Feld passt oder nicht.

mfG
Thomas

Thema: Truncated Texts von aussen in WPF-Applikation ermitteln
Am im Forum: GUI: WPF und XAML

Hallo

Ich habe mal bei einem WPF-Projekt eine TextBox eingesetzt, die bei zu langem Text diesen abschneidet und durch "..." ersetzt. Dieses ist auf CodeProject zu finden. Vielleicht hilft Dir das ja.

mfG
Thomas

Thema: SQL, C#: Wie fragt man nach dem Inhalt einer ComboBox wenn die 2 Werte eine Tabelle beinhaltet.
Am im Forum: Datentechnologien

Hallo

Der Fehler würde auch mit SQL-Parameter passieren (beachte die Werte in der Combobox). So wie es jetzt aufgebaut ist, bekommt der TE nie Werte aus der DB.

Thomas

Thema: SQL, C#: Wie fragt man nach dem Inhalt einer ComboBox wenn die 2 Werte eine Tabelle beinhaltet.
Am im Forum: Datentechnologien

Hallo

Was Dir bis jetzt noch keiner gesagt hat: setze beim Vergleich nach dem Select-Command mal einen Breakpoint und schau Dir im Debugger Deinen Command an. Dann wirst Du den Fehler selbst bemerken.

Thomas

Thema: Visual Studio 2019 - Class View bzw. Code Behind einer Form fehlt im Projektmappen-Explorer
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo

Wenn Du auf "Form1.cs" doppelt klickst, dann öffnet sich entweder der Designer oder die "Code-Behind-Datei". Dies kannst Du einstellen, in dem Du mit der rechten Maustaste das Kontextmenü öffnest und dann die Option "Open with" auswählst. Danach kannst Du die Standardaktion festlegen. Du kannst im Kontextmenü auch direkt den Code oder den Designer öffnen.

Thomas

Thema: Wie kann ich Werte aus Excel im C# berechnen oder Tool finden, dass Eingabe & Berechnung abdeckt?
Am im Forum: Office-Technologien

Hallo

Ich hatte einmal ein ähnliches Problem. Es gibt von DevExpress eine Komponente namens "Spreadsheet". Diese kann Excelfiles direkt einlesen (mit allen Formeln, benannten Felder usw.) und funktioniert genauso wie Excel. Man kann sogar eine Oberfläche dazu erstellen, die wie Excel aussieht. Über C# kannst Du dann die Felder auslesen, die Berechnungen starten und was Du sonst noch alles brauchst.

mfG
Thomas

Thema: [gelöst] Error 404 Ursache finden
Am im Forum: Web-Technologien

Hallo

Mithilfe von Serilog konnte ich tatsächlich den Fehler finden. Ich hatte zwar die API neu deployed aber das Service nicht.

Danke
Thomas

Thema: Im SQLite automatisch Spalten erstellen lassen
Am im Forum: Datentechnologien

Hallo

Für dein Problem brauchst Du doch nur eine Tabelle mit 4 Spalten:


DiID | MiID | Datum | Schicht


Damit kannst Du alle Tage die ein Mitarbeiter arbeiten soll eintragen und entsprechend auch suchen.

Thomas

Thema: [gelöst] Error 404 Ursache finden
Am im Forum: Web-Technologien

Hallo
Ich habe folgendes Szenario:

Postman --> Post mit Modell im Body --> ASP.NET Core --> gRPC --> Windowsservice

Das ganze funktionierte bis jetzt alles tadellos und ich bekomme die richtige Antwort mit dem Status 200 zurück. Jetzt habe ich das Modell um einen Wert erweitert und die Middleware und das Service entsprechend erweitert. Bei mir in der Debugumgebung läuft alles so wie es soll. Jetzt habe ich das ganze in unsere Testumgebung deployed und wollte das mit Postman testen. Wenn ich jetzt den POST-Request absetze, dann kommt immer einen Error 404 (not Found) zurück. Wie kann ich herausfinden, wo der Fehler liegt?

P.S.
Andere Requests laufen einwandfrei, es liegt also nur an dem einen Request.

mfG
Thomas

Thema: [gelöst] gRPC als Service
Am im Forum: Netzwerktechnologien

Hallo

das Netzwerkprotokoll habe ich mir angesehen. Leider sieht man daraus nicht viel, da der Client natürlich immer dasselbe sendet. Wenn ich die Application im Commandfenster laufen lasse, dann kommt halt nach einigen Millisekunden die richtige Antwort, beim Service nach einigen Minuten der Reply mit HTTPResponse 200 und gRPCStatus 1. Dazwischen liegt das Service, das halt nichts macht.

Ich habe aber gestern noch einiges im Internet recheriert und bin dabei auf das Topshelf-Projekt (Topshelf) gestossen. Damit habe ich den Server neu aufgesetzt und jetzt funktioniert alles (Kommunikation über TCP für die alten WindowsClients und über gRPC für die Web-Applikation).

mfg Thomas

Thema: [gelöst] gRPC als Service
Am im Forum: Netzwerktechnologien

Hallo

Ich möchte aus einer .ASP NET-Core Application auf ein bestehendes Service (.Net FW 4.6.1) zugreifen. Ich habe mich hier für die Kommunikation mittels gRPC entschieden. Mein Server sieht wie folgt aus:


      string IP = "0.0.0.0";
      int Port = 23116;
      try
      {
        Server server = new Server
        {
          Services =
        {
          GRPC_Test.BindService(new Test_GRPC())
        },
          Ports = { new ServerPort(IP, Port, ServerCredentials.Insecure) }
        };
        server.Start();
        service.EventLog.WriteEntry($"API-Server auf {IP}:{Port} gestartet");
      }
      catch (Exception ex)
      {
        service.EventLog.WriteEntry("API-Server konnte nicht gestartet werden");
        service.EventLog.WriteEntry(ex.Message);
      }

und der Client so:


      int Port = 23116;
      //string IP = "127.0.0.1";                                // localhost
      string IP = "10.xx.xx.xx";                               // Server-IP

      Channel channel = new Channel(IP, Port, ChannelCredentials.Insecure);
      var client = new GRPC_Test.GRPC_TestClient(channel);

Wenn ich das ganze im Visualstudio (mit der lokalen IP im Client) laufen lasse, dann funktioniert alles wunderbar (HTTP-Request via Postman liefert richtigen Reply). Kopiere ich die EXE auf den Server, starte diese in einem CMD-Fenster und lasse den Client in VS laufen, dann funktioniert es auch wie es soll. Installiere ich die EXE aber am Server als Service, dann bekomme ich im Client nach einiger Zeit eine Exception mit folgendem Inhalt:
Fehler
RpcException: Status(StatusCode=Cancelled, Detail=&quot;Cancelled&quot;)

und der Stacktrace zeigt auf die aufrufende Funktion. Leider konnte ich auch nichts über Google hierzu finden, daher hier meine Bitte um Hilfe. Vielleicht wissen ja die Gurus unter Euch, wo der Fehler verborgen ist.

mfg
Thomas

Thema: Alle 100ms ein Kommando, was der User auch via Button frei triggern kann, geht nur manchmal
Am im Forum: GUI: Windows-Forms

Hallo

stell Deine Befehle die Du senden möchtest (Timer, User) in eine Queue und arbeite diese sequentiell ab. Und zwar immer erst dann, wenn eine Antwort vollständig empfangen wurde. Ich vermute mal, dass Deine Peripherie durcheinander kommt, wenn es beim Senden eine neue Nachricht bekommt.

Thomas

Thema: VS 2017 Hilfe offline Bücher fehlen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo pixfreak

Also ich habe alle möglichen Dokumentationen zum downloaden (siehe Anhang). Hast Du vielleicht noch eine altere Version des Helpviewers (aktuell 2.3)


mfg Thomas

Thema: VS 2017 Hilfe offline Bücher fehlen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo

Du kannst über "Help/Add and Remove Help Content" im Help Viewer die Hilfen auswählen und downloaden (Manage Content). Danach im Visual Studio als Help-Viewer über "Help/Set Help Preference" "Launch in Help Viewer" auswählen.


Thomas

Thema: Kann ich meine bestehende Architektur mit WinForms-Client auf eine Web-App umbauen?
Am im Forum: Smalltalk

Hallo

Es geht mir nicht darum, die ganze bestehende Applikation/Infrastruktur umzustellen, sondern nur neue Plugins in die neue Welt zu bringen. Da das ganze nur bei uns im Haus läuft (internes LAN, hinter einer DMZ) wäre das Problem mit der Authentifizierung meiner Meinung nach nicht gegeben (oder sehe ich das falsch?).

Das ganze ist deshalb noch so allgemein, da ich erst mal die Möglichkeiten abklären möchte. Dies damit ich dann entsprechende Schulungen (ohne die es wohl nicht gehen wird) beantragen kann. Wenn ich aber meinem Chef sage "ich muss jetzt alles aus den letzten 12 Jahren umstellen" dann wird die Antwort wohl "Das kannst Du vergessen" lauten.

mfG Thomas

Thema: Kann ich meine bestehende Architektur mit WinForms-Client auf eine Web-App umbauen?
Am im Forum: Smalltalk

Guten Morgen
Ich bräuchte mal Eure Anregungen und Meinungen. Ich habe eine Client-Server-Anwendung welche seit ca. 12 Jahren von mir entwickelt und auch noch immer aktuell weiterentwickelt wird. Diese hat folgenden Aufbau:

1. Server : Windows-Service mit Verbindung zu SQL-,Oracle- und Progress-Datenbanken. Nimmt die Aufrufe der Clients entgegen, verarbeitet diese und sendet via TCP einfache Typen (int,string…) oder eine DataTable zurück.

2. Client : Eine Anwendung welche auf einem Netzlaufwerk liegt und mittels TreeView den Usern die Module anzeigt, für die sie über das AD berechtigt sind. Diese Module (derzeit ca. 85) werden dann als Plugins in eine eigene App-Domaine geladen und ausgeführt. Dadurch kann jederzeit ein Update der Plugins gemacht werden.

Diese Struktur läuft einwandfrei mit WinForms. Jetzt habe ich für die letzte Anwendung bereits den Pfad etwas verlassen, in dem ich für eine andere Anwendung eine Middleware in WPF geschrieben habe, die aber auch auf den Serverdienst zugreift.

Nachdem ja jetzt sehr viel von Web-Anwendungen (Angular, Typescript etc.) die Rede ist würde ich auch gerne auf diese Technologie umsteigen. Die Gelegenheit würde sich demnächst anbieten, da ein neues Projekt (= Plugin) ansteht.

Jetzt meine Frage an Euch: kann ich die bestehende Infrastruktur so weiter verwenden oder müsste ich das ganze neu auf die Beine stellen. Ich stelle mir das ungefähr so vor, dass ich aus der Clientanwendung die Angular-App aufrufe und diese via Web-API Verbindung zu meinem Windowsdienst aufnimmt. Oder seid ihr der Meinung „Schuster bleib bei deinen Leisten“ und ich sollte weiter mit WinForms arbeiten.

mfG
Thomas

Thema: 2 DataTable zusammen führen
Am im Forum: Grundlagen von C#

Hallo

Du kannst folgendes Select ausführen:


select distinct
	ProjektID
,Datum3 = (select a.Datum from Test a WHERE a.Status = 3)
,Datum5 = (select b.Datum from Test b WHERE b.Status = 5)
from Test

dann solltest Du eine Tabelle mit den gewünschten Spalten bekommen.

Thomas

P.S.
Ich habe gerade festgestellt, dass obige Lösung nicht richtig funktioniert, sorry. Die Auswertung von hypersurf liefert Dir fast die richtige Lösung, es fehlt nur ein DISTINCT im Select.

Thema: Eigene Application aus Fremdapplication ansteuern
Am im Forum: Rund um die Programmierung

Hallo

Danke für die Infos, werde mich mal mit REST beschäftigen.

mfG
Thomas

Thema: Eigene Application aus Fremdapplication ansteuern
Am im Forum: Rund um die Programmierung

Hallo

Ich bräuchte mal einen Denkanstoß. Ich habe eine WPF-Applikation die jetzt mit einer Fremdapplikation via einer API-DLL angesprochen werden soll. Es sollen Daten in meine Applikation übergeben, dort verarbeitet und das Ergebnis wieder zurück geliefert werden. Ich habe jetzt probiert, über WCF aus der API-DLL mit meiner Anwendung zu kommunizieren (diese ist dann der WCF-Host). Hier habe ich aber zwei Probleme :
1. Wenn meine Anwendung nicht gestartet ist funktioniert das natürlich nicht. Die Anwendung kann ich natürlich über einen Prozess starten, aber wie teile ich dann der API-DLL mit, das der Host bereit ist?
2. Wenn die Anwendung läuft, funktioniert die Kommunikation erst mal. Schließe ich die Fremdanwendung aber und starte sie neu, dann kommt in meiner Anwendung nichts mehr an.

Ist hier WCF überhaupt das richtige Mittel oder würdet Ihr das anders lösen? Wenn WCF richtig ist, dann kann ich ja relevante Teile hier posten und auf Eure Hilfe bezüglich der Probleme hoffen.

mfG
Thomas

Thema: RS232-USB Adapter and XP-Maschine anschliessen
Am im Forum: Rund um die Programmierung

Hallo

Ich verstehe den Sinn nicht ganz. Wenn Du einen USB<->Seriell-Adapter an das System anschließt, dann wird diesem ein COM-Port zugewiesen. Dieser ist im Gerätemanager zu sehen. Dann startest Du ganz normal Dein altes DOS-Programm und konfigurierst dort den USB-COM-Port und fertig. Ein Problem hast Du nur, wenn dein Programm nur bestimmte COM-Ports zulässt. Dann musst Du den Port im Gerätemanager entsprechend um konfigurieren.

mfG Thomas

Thema: String mit Regex extrahieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo

Du könntest auch folgendes machen:


      string input = @"TRACK(6(2657,4331)(-2657,4331)),TRACK(6(-2657,4331)(-2657,-4331)),CIRCLE(296,294,-1378,3150)))";
      string pattern = @"((TRACK)\(\d\((?<X_Start>(\+|-)?\d*),(?<Y_Start>(\+|-)?\d*)\)\((?<X_Ende>(\+|-)?\d*),(?<Y_Ende>(\+|-)?\d*))";
      Regex regex = new Regex(pattern);
      var matches = regex.Matches(input);
      foreach (Match match in matches)
      {
        Console.Write("Start X : " + match.Groups["X_Start"].Value);
        Console.Write(" Y : " + match.Groups["Y_Start"].Value);
        Console.Write(" Ende X : " + match.Groups["X_Ende"].Value);
        Console.WriteLine(" Y : " + match.Groups["Y_Ende"].Value);
      }

lg Thomas

Thema: Einzelne Bits aus Variable auslesen
Am im Forum: Grundlagen von C#

Hallo

Ich nehme mal an "Steuerbit" ist ein Boolean? Dann musst Du folgendes schreiben:

 
Steuerbit = ((Steuerwort & 1) == 1);
bool Bit2 = ((Steuerwort & 2) == 2);
usw.

Thomas

Thema: [gelöst] mit if eine Abfrage von Ja/Nein Feld in einer Access Datenbank
Am im Forum: Grundlagen von C#

Hallo

Dein Fehler liegt schon in der Abfrage (Where schlafen = "true"). Sie Dir mal den Artikel über SQL-Parameter an.

Thomas

Thema: Obfuscator für Sourcedateien (*.cs)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo

Ich hatte vor Jahren so ein ähnliches Problem, damals mit Delphi 1.0 (Pascal). Ich habe es damals so gelöst, das ich eine Checksumme über die Datei gebildet und diese vor dem Laden überprüft habe. Hatte der Benutzer etwas im File geändert, stimmt diese natürlich nicht mehr und das Laden wurde abgebrochen.

Thomas

Thema: Icon anheften
Am im Forum: GUI: WPF und XAML

Hallo

Es geht schon, aber über einen Umweg:

1. Kopiere die EXE-Datei auf den Desktop
2. Hefte das Programm an die Taskleiste
3. Mittels rechter Maustaste die Eigenschaften der Verknüpfung bearbeiten
4. Bei "Ziel" und "Ausführen in" den Netzwerkpfad eintragen
5. Das Programm kann dann aus der Taskleiste verwendet werden
6. Das kopierte Programm am Desktop kann wieder gelöscht werden.

Thomas

Thema: Gibt es eine Raster Option für den visuellen VS Designer?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo Sebastian

Unter "Tools/Options/Windows Form Designer/General" kannst Du unter "Layout Settings" die Gridgröße und die Sichtbarkeit des Grids einstellen.

Thomas

Thema: Multithreading - Threads laufen hintereinander ab [==> weil alles an den GUI-Thread delegiert wird]
Am im Forum: GUI: Windows-Forms

Hallo

Da hast Du das mit dem Invoke noch nicht ganz verstanden. Wenn Du Invoke aufrufst, dann wird das wieder im Hauptthread ausgeführt. In Deinem Beispiel bedeutet dies, das Du den Thread "doit1" startest und dann sofort wieder das "make1" in der GUI ausführst. Erst wenn dies fertig ist, dann geht es mit "doit2" weiter. Starte direkt "make1" und "make2" und verlagere die Verschiebung des Panels mittels Invoke in die GUI.

mfG
Thomas