Laden...
P
Platoon myCSharp.de - Member
Systemadministrator CAQ / DB - Systeme Schwerpunkt Oracle / MSSQL NRW Dabei seit 15.02.2017 57 Beiträge

Forenbeiträge von Platoon Ingesamt 57 Beiträge

04.10.2022 - 19:53 Uhr

Hi,

das label-Array ist in dem Event btnlöschen_Click nicht vorhanden.

Erstelle doch sinnvollerweise eine Collection global als Property anstatt diese nur in einer Methode zu erzeugen.

Dann sollte auch der Zugriff klappen.
Array in diesem Zusammenhang zu nutzen ist denkbar ungünstig.

29.09.2022 - 18:22 Uhr

Grundsätzlich geht es schon was du vorhast, aber wie Th69 schon sagte, stimmen die Properties nicht überein.

Du kannst das "umgehen" wenn du über das jeweilige Property in der Klasse Song eine Annotation setzt:


      [JsonPropertyName("ReleaseDate")]
      public string VRelease { get; set; }

Sauberer wäre es allerdings, wenn die Properties identisch wären.

16.06.2022 - 13:44 Uhr

Hi,

ein bisschen Doku zu dem von FZelle angesprochenem Thema: Abfragebenachrichtigungen

Gruß

28.03.2022 - 20:56 Uhr

Hallo,

wenn es sich um eine Konsolenapplikation dreht, dann nutze doch Command Line Args aus der Main-Methode dafür.

Du kannst das auch auf andere Applikationstypen (Winforms, WPF etc.) recht leicht adaptieren.

Gruß 🙂

08.11.2021 - 19:35 Uhr

Hallo zusammen,

ich weiß nicht ob das der richtige Bereich ist - daher bitte ich um Nachsicht.

Ich habe früher wie in diesem Link vorgegangen
um mir alle verfügbaren SQL-Server Instanzen ausgeben zu lassen.

Das funktioniert allerdings nicht mehr und meine Recherchen ergaben, dass die Verwendung von


... SmoApplication.EnumAvailableSqlServers(false);

wohl nicht mehr unterstützt wird - siehe hier.

Erhalte die gleiche Meldung 😦.

Habt ihr eine alternative? Das was ich bisher gefunden habe war, eine Abfrage über ServiceController - meiner Meinung nach
gibt dies aber nur die lokalen Instanzen aus und nicht die, die im Netzwerk über den SQLBrowser gefunden werden können.
Und genau das Feature suche ich aktuell.

Danke schonmal.
Lg,
Platoon.

27.10.2021 - 20:49 Uhr

Und pack mal in die Main()....Methode noch ein System.ReadKey()

Dann wird es sich auch nicht schließen.....

25.10.2021 - 22:59 Uhr

Mach's doch so wie du es geschrieben hast - das wäre zwar ein nicht ganz so eleganter Weg - wie meine Vorredner schon geschrieben haben - aber das würde klappen - vorausgesetzt der nächste Marker wäre halt "ZEILE_X"

Wenn du eine eindeutige Kennung hast, dann sollte das für dich auch passen. Aber wenn du Einfluss auf die Textdatei hast, dann gestalte sie so, dass man sie gescheit auslesen kann und nicht über solche Krücken.

23.10.2021 - 17:11 Uhr

Hallo Abt,

Danke für das Feedback - den Quellcode werde ich einem Refactoring unterziehen.

Danke für den GitHub-Link - den werde ich mir ansehen. Was das DeepCopy angeht - auch hierfür danke für die Info. Werde das entsprechend ändern (im Refactoring) und für die Zukunft berücksichtigen 🙂.

22.10.2021 - 18:37 Uhr

Hallo zusammen,

ich möchte über ein TIFF dass ich vorher in einen MemoryStream lade OCR drüber laufen lassen.
Dazu nehme ich eine Abwandlung von 2 Methoden die ich dazu nutze um mir eine PDF in ein TIFF zu exportieren.
Das klappt super --> auch ohne den Generic GDI+ Fehler.

Das sind die Original Methoden:


List<MemoryStream> inMS;
        private void SaveAsImages(string path)
        {
            inMS = new List<MemoryStream>();
            try
            {
                System.Drawing.Image image = null;
                for (var i = 0; i < Renderer.PageCount; i++)
                {
                    var size = Renderer.Document.PageSizes[i];
                    image = Renderer.Document.Render(i, (int)size.Width , (int)size.Height, 300, 300, false);
                    MemoryStream ms = new MemoryStream();
                    image.Save(ms, ImageFormat.Tiff);
                    inMS.Add(ms);
                }
                SaveAsMultiPageTiff(path, inMS);
            }
            catch (Exception ex)
            {
                Cts.Cancel();
                Debug.Fail(ex.Message);
            }
        }

        private void SaveAsMultiPageTiff(string sOutFile, List<MemoryStream> inMS)
        {
            Mouse.OverrideCursor = Cursors.Wait;
            System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
            ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
            EncoderParameters encoderParameters = new EncoderParameters(1);
            encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);

            Bitmap firstImage = null;
            try
            {

                using (MemoryStream ms = new MemoryStream())
                {
                    System.Drawing.Image.FromStream(inMS.First()).Save(ms, ImageFormat.Tiff);
                    firstImage = (Bitmap)System.Drawing.Image.FromStream(ms1);
                  
                    firstImage.Save(sOutFile, encoderInfo, encoderParameters); 
                }


                encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);

                Bitmap imagePage;
            
                for (int i = 1; i < inMS.Count; i++)
                {

                    using (MemoryStream ms = new MemoryStream())
                    {
                        System.Drawing.Image.FromStream(inMS[i]).Save(ms, ImageFormat.Tiff);
                            imagePage = (Bitmap)System.Drawing.Image.FromStream(ms1);
                        

                        firstImage.SaveAdd(imagePage, encoderParameters); //throws Generic GDI+ error if the memory streams are not open when this is called
                    }
                }

            }
            catch (Exception)
            {
               
                throw;
            }
            finally
            {
            
                encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
                firstImage.SaveAdd(encoderParameters);
                MessageBox.Show("Dokument wurde erfolgreich nach " + sOutFile + " exportiert.", "Dokument export...", MessageBoxButton.OK);
                Mouse.OverrideCursor = Cursors.Arrow;
            }
        }

Ich habe die an den markierten Stellen angepasst --> wo der Fehler auftritt schreibe ich mal in großen Lettern mit dabei:


   List<MemoryStream> inMS;
        
        private void SaveAsImages(string path)
        {
            inMS = new List<MemoryStream>();
            PdfiumViewer.PdfRenderer Renderer = new PdfiumViewer.PdfRenderer();
            try
            {
                Renderer.OpenPdf(path);
                System.Drawing.Image image = null;
                for (var i = 0; i < Renderer.PageCount; i++)
                {
                    var size = Renderer.Document.PageSizes[i];
                    image = Renderer.Document.Render(i, (int)size.Width, (int)size.Height, 300, 300, false);
                    MemoryStream ms = new MemoryStream();
                    image.Save(ms, System.Drawing.Imaging.ImageFormat.Tiff);
                    inMS.Add(ms);
                }
                SaveAsMultiPageTiff(path, inMS);
            }
            catch (Exception ex)
            {
            }
        }

        private void SaveAsMultiPageTiff(string sOutFile, List<MemoryStream> inMS)
        {
            Mouse.OverrideCursor = Cursors.Wait;
            System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
            ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
            EncoderParameters encoderParameters = new EncoderParameters(1);
            encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);

            Bitmap firstImage = null;
            try
            {

                using (MemoryStream ms1 = new MemoryStream())
                {
                    System.Drawing.Image.FromStream(inMS.First()).Save(ms1, System.Drawing.Imaging.ImageFormat.Tiff);
                    firstImage = (Bitmap)System.Drawing.Image.FromStream(ms1);
                    MemoryStream ms2 = new MemoryStream();
                    firstImage.Save(ms2, encoderInfo, encoderParameters); //throws Generic GDI+ error if the memory streams are not open when this is called
                    
                }


                encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);

                Bitmap imagePage = null;
                for (int i = 1; i < inMS.Count; i++)
                {

                    using (MemoryStream ms1 = new MemoryStream())
                    {
                        System.Drawing.Image.FromStream(inMS[i]).Save(ms1, System.Drawing.Imaging.ImageFormat.Tiff);
                        imagePage = (Bitmap)System.Drawing.Image.FromStream(ms1);


                        firstImage.SaveAdd(imagePage, encoderParameters); //throws Generic GDI+ error if the memory streams are not open when this is called
                    }
                }
                encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
                firstImage.SaveAdd(encoderParameters);
                ÄNDERUNGEN AB HIER
                var img = firstImage.Clone();
                firstImage.Dispose();
                using (MemoryStream ms = new MemoryStream())
                {
                    ((Bitmap)img).Save(ms, ((Bitmap)img).RawFormat); ==> UND HIER KNALLT ES 
                    DoOCR(ms.ToArray());
                }
                ÄNDERUNGEN BIS HIER
                


            }
            catch (Exception ex)
            {
                //ensure the errors are not missed while allowing for flush in finally block so files dont get locked up.
                throw;
            }
            finally
            {
                // Close out the file
                Mouse.OverrideCursor = Cursors.Arrow;

            }
        }

Als Fehler bekomme ich folgendes:> Fehlermeldung:

A generic error occurred in GDI+.

Im StackTrace steht folgendes:

Fehlermeldung:
bei System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
bei System.Drawing.Image.Save(Stream stream, ImageFormat format)
bei DoSSuiteV2.Models.DMSModel.SaveAsMultiPageTiff(String sOutFile, List`1 inMS) in ...

Ich weiß leider nicht mehr weiter - hat jemand eine Idee für diese mehr oder weniger nichts-sagende Meldung?

20.10.2021 - 23:16 Uhr
  
 private Adressdaten addData = new Adressdaten();  
        public Adressdaten AddData  
        {  
            get => addData;  
            set  
            {  
                if (value != addData)  
                {  
                    addData = value;  
  
                    AddTyp.Adresstyp = Adressdatenliste.FirstOrDefault(x => x.AdressTyp == AddTyp.Adresstyp).ToString(); // Funktioniert nicht  
                    RaisePropertyChanged();  
                    ChangeAdressData = true;  
  
                      
  
                }  
            }  
        }  
  
  

Gute - CodeBehind ist etwas blöde ausgedrückt - aber genau an dem Punkt "Funktioniert nicht".

Warum lagerst du das nicht in ein Command aus?

20.10.2021 - 22:50 Uhr

Ich würde dein "Funktioniert nicht" in ein separates Command setzen und beim entsprechenden Event im XAML (nicht Code-Behind sondern über die Behaviors) setzen.
So könnte man es machen.

Ich könnte mir auch vorstellen, dass es einfacher über ReactiveUI geht - aber da fuchse ich mich gerade selbst noch ein. Warum änderst du denn die Collections direkt in den Properties? Ist meines Erachtens nach keine gute Idee und sollte getrennt geschehen.

20.10.2021 - 22:39 Uhr

Ganz so einfach ist das nicht ein Bild aus einem PDF zu extrahieren.

Da gibt es mehrere Möglichkeiten die auch teils recht fehlerbehaftet sind.
Bei iText7 (vormals iTextSharp) müsstest du dir das Canvas raussuchen bzw. wissen an welcher Position das Bild
platziert ist.

Es dürfte noch mit GhostScript direkt gehen - das ist dann aber nochmal eine Ecke
aufwändiger.

Abt hat da durchaus recht - die freien Bibliotheken sind zum erzeugen meistens brauchbar aber bei der
Verarbeitung von PDFs ohne Umwege für die Füße.

Im übrigen - mit welcher Sprache du arbeitest ist in dem Punkt erstmal egal - PDF verstehen ist da besser 😉.
Nicht böse gemeint aber ganz so einfach ist es halt leider nicht bei diesem Format.

26.03.2021 - 19:42 Uhr

Hmmm ich denke du hast recht.....

Das mit dem Weichzeichnen wäre auf die Summe der Fenster die womöglich geöffnet sein könnten to-much.

Könnte das zwar über das BaseViewModel abbilden aber da wird es erstmal einfacher sein die Anwendung "still zu legen".
Dann Handel ich das erstmal so, dass nach einer Zeit x der Anmeldebildschirm der Anwendung in den Vordergrund tritt
und alles andere blockiert.

Einen Blur-Effect über alle Fenster zu erstellen nach einer entsprechenden Zeit wird dann in einem Testprojekt umgesetzt.

Danke dir Abt.

Sofern ich eine Umsetzung habe, werde ich sie hier posten 🙂

26.03.2021 - 19:29 Uhr

Hallo Abt,

ich glaube da hast du mich vielleicht falsch verstanden.

Ich möchte kein Lock aus dem Windows sondern nur, dass die Application sich quasi bei Inaktivität weichzeichnet.

Klar wäre es auch eine Möglichkeit die Windows-Session zu locken aber das wäre nicht mein Ziel.

[Edith sagt]
Falls du aber meinst, den Benutzer mit einer gespeicherten Session-ID die ich derzeit nicht habe
zum Login-Bildschirm zu schicken wäre das auch eine alternative 🙂

Gruß,
Dom

26.03.2021 - 18:52 Uhr

So ganz ist mir deine Vorstellung noch nicht klar.

Möchtest du die Lückentexte dynamisch durch einen Benutzer erstellen lassen oder soll das beim
laden des jeweiligen Textes automatisch passieren?

Das wäre wichtig zu wissen.

Abt hat, wie recht häufig, recht. Selbst berechnen und selbst zeichnen wäre ein sauberer weg.
Aber dafür müsste man wissen, vielleicht überlese ich es auch einfach 😄, wie der Lückentext
gebaut werden soll.

Gruß,
Dom

26.03.2021 - 18:39 Uhr

Hi zusammen,

ich benötige einen kleinen Denkanstoß weil ich gerade absolut auf dem Schlauch stehe.

Es geht um eine Anwendung mit mehr oder minder "kritischen" Daten.
Ziel ist es, dass wen der Benutzer der Anwendung eine Zeit x nicht aktiv in der Anwendung unterwegs war,
die aktiven Fenster Weichgezeichnet werden und eine Verifikation per Benutzername und Passwort notwendig ist
um dies wieder rückgängig zu machen.

Mein Gedanke wäre jetzt, dass ich die letzte wirkliche Aktivität im Programm mitlogge (sprich Zeit und was gemacht wurde (nicht welche Eingabe))
und ich dann einen Timer gegen diesen Wert laufen lasse. Nach Ablauf des Timers und sofern nichts passiert ist, würde ich dann die
Forms durchgehen und diese Weichzeichnen - und danach den "Loginscreen" einblenden.

Macht das so Sinn oder gibt's da bessere Wege? Alternativ, und das hatte ich schon in der ersten Version wäre, dass ich den Benutzer
einfach "Auslogge" - das hat aber den uncharmanten Nachteil, dass nicht gespeicherte Werte einfach flöten gehen.

Gruß,
Dom

04.03.2021 - 18:25 Uhr

Das liegt grundsätzlich an deinen Anforderungen. Wenn du willst, dass das alles aus deiner Software möglich ist,
dann musst du das selbst zur Verfügung stellen.

Ansonsten hängt´s vom DB-Backend ab. Wenn MSSQL, dann sorge dafür, dass die Reportservices mit installiert werden.

Die sind zwar am Anfang recht frickelig - aber wenn man damit ein paar mal gearbeitet hat, dann sind die ganz Nett.

05.02.2021 - 20:37 Uhr

Muss erst noch eine VM aufsetzen um das mal gegen zu prüfen. Mir war gerade noch was dazwischen gekommen.

Ich setzt jetzt gerade die VM auf und dann teste ich das nochmal. Mach am besten direkt 2 - einmal mit Visual Studio, einmal ohne.

Wenn es mit der neuen Version zu tun hat, sollte man das vllt. melden 🙂.

05.02.2021 - 17:05 Uhr

Neee da gibt's keinen Grund für 🙂.

Aber es wäre trotzdem nett zu wissen, warum es nicht funktioniert. Vor allem weil es ja bei Windows funktioniert und bei Mac nicht. Könnte jetzt noch auf einer Linuxmaschine schauen ob es da geht. Eventuell ein Problem auf Seiten Mac OS Big Sur oder bei dem Provider an sich.

05.02.2021 - 16:48 Uhr

Danke für die Antworten.

Das ich auf die Master gehe hat erstmal seinen Grund und wird später noch geändert.

Der Benutzer hat natürlich die Berechtigungen - das ist der sa --> auch das wird noch geändert. Es geht mir gerade in dem Projekt erstmal um einen allgemeinen Versuch.

Ich bin der Sache etwas näher gekommen. Mit dem Microsoft.Data.SqlClient kann ich keine Verbindung aufbauen, mit dem System.Data.SqlClient geht es hingegen.

Da bin ich noch nicht dahinter gestiegen woran es liegt - wenn ich die KonsolenApp auf dem Rechner Debugge wo der SQL Server läuft, dann funktioniert es mit beiden Varianten. Versuche ich es über VS for Mac bekomme ich genannten Fehler.

Ich schaue gleich mal nach, ob es mit einer anderen Windows Maschine geht.
Wenn das auch funktioniert schmeiße ich mal WireShark an und schaue was da wohin gesendet wird.

Ports sind entsprechend geöffnet - der Rechner ist auch erreichbar. Ich kann ja von dem Mac mit DBVisualizer auch auf den Server zugreifen.

03.02.2021 - 22:21 Uhr

Japp kommt hin. Die IP gehört zu Cloudflare - sagt ein Whois.

Danke dir Palladin.

@Team: Vielleicht könnte das Team eine kurze Info auf der Startseite hinterlegen bis dies behoben ist.
Nicht jeder schaut in die entsprechenden Threads rein 😉.

03.02.2021 - 21:58 Uhr

Hi,

DBVisualizer nutzt mehrere Treiber - entweder JDBC oder jTDS.
Ich frage mich halt was der jTDS anders macht als der JDBC und ob ich da grundlegend was übersehe oder ob es da ein Leck gibt....wäre ja auch Sicherheitstechnisch relevant.

Dass wir beim .NET Framework im Standard mit dem ADO.NET arbeiten ist mir schon klar - aber das Fehlerbild ist das Gleiche.

Mit User ID habe ich es schon versucht. Das ging auch nicht.


    public static bool DatabaseExists(string DBName)
        {
            SqlConnection connection = new SqlConnection(@"Server=SERVER\INSTANCE;Database=master;User=USERNAME;Password=PWD;");
            try
            {
                SqlCommand command = new SqlCommand("SELECT name FROM master.dbo.sysdatabases WHERE('[' + name + ']' = @dbname OR name = @dbname)", connection);
                command.Parameters.AddWithValue("@dbname", DBName);
                connection.Open();
                result = command.ExecuteNonQuery();
                return true;
            }
            catch(Exception ex)
            {
                Console.WriteLine(result);
                return false;
            }
        }

Der Code ist nicht optimal - aber der wird erst optimiert, wenn der Fehler behoben ist 😉

03.02.2021 - 21:03 Uhr

Hallo Abt,

der zählt ja immer hoch - daher meine Frage / mein Report 😉.

Habe aber auch noch was anderes....
Dazu hab ich euch eine Mail geschickt (bevor ich den Thread hier gesehen habe).

Die öffentliche IP beim Login (also bei der Mail die dann kommt) ist, jedenfalls bei mir, falsch.
Ich weiß nicht wo ihr die abgreift aber die ist definitiv nicht korrekt 🙂.

Könnte zu Verwirrungen führen.

03.02.2021 - 19:49 Uhr

Entweder sehe ich die nicht oder die Datei ist nicht hochgeladen worden.

Schau da bitte mal nach 🙂

03.02.2021 - 19:33 Uhr

Hallo,

schau dir die Doku von MS zu den Frameworks (vorzugsweise .NET Doku.
Arbeite dann Tutorials durch oder probier dich selbst.

Wenn du dann sicher bist die ersten Programme selbst zu entwickeln - sei es nur ein "Held World" dann bist du auf einem guten Weg.

Aber Autodidakten die sich rein durchs "abschauen" das Programmieren selbst beigebracht haben gibt es selten. Auch dies, wie Abt schon sagte - ohne persönliche Wertung 🙂.

03.02.2021 - 19:28 Uhr

Hallo Team,

bin mir gerade nicht sicher ob das bei dem WBB Forum nicht auch so war aber wenn ich einen Thread erstellt habe und dann mal rein schaue ob sich da was getan hat, dann wird der HIT-Counter hochgezählt.

Ist das so gewollt oder ist das ein Bug?

Weil meine Hits zu einem erstellten Thema sollten ja so in der reinen Theorie nur dann zählen, wenn es was neues gegeben hat. Sonst verfälscht das die Statistik 🙂.

Das nur so am Rande.

03.02.2021 - 19:24 Uhr

Auch wenn schon ein paar Tage alt.....

....aber besteht die Notwendigkeit direkt ab dem ersten Zeichen zu filtern?

Sonst könntest du im TextChanged Event entsprechend auf die Länge des eingegebenen Strings prüfen und
erst dann das aufrufen, wenn die Minimallänge überschritten wurde.

Ansonsten gibt's da ein Property bei der ComboBox (AutoComplete): ComboBox.AutoCompleteMode Eigenschaft

Das könntest du dir mal ansehen.

03.02.2021 - 19:00 Uhr

Hallo,

schau doch mal hier: http://www.nullskull.com/a/1382/styling-the-wpf-calendar-to-resemble-outlooks-month-view-calendar.aspx

Stimme meinen Vorrednern zu - schau dir den Code mal an und abstrahiere das auf deine Bedürfnisse. Dann hast du auch einen Lerneffekt.

03.02.2021 - 18:56 Uhr

Ich denke, dass du für sowas ziemlich wenig Resonanz bekommen wirst.

Wenn du das schon in VB.NET geschrieben hast, dann übersetze es. Andernfalls lass es besser bleiben. Solche Vorhaben sind in Foren nicht gerne gesehen.

03.02.2021 - 18:54 Uhr

Verwendetes Datenbanksystem: <MSSQL>

Hallo zusammen,

hoffe, dass die Rubrik richtig gewählt ist....

Ich stehe gerade vor einem kleinen Problem wo ich nicht mehr weiter weis.

Ich erstelle gerade eine .NET 5 Konsolenanwendung wo ich versuche eine DB-Connection zu einem SQL Server herzustellen. Soweit, so schön. Normalerweise bekomme ich die Connection zu dem SQL Server auch hin aber diesmal beisse ich mir die Zähne aus.

Der Rechner bzw. der MAC kann ohne Probleme mit DBVisualiser und dem jDTS Treiber auf die entsprechende Datenbankinstanz zugreifen. Verwende ich den JDBC Treiber von Microsoft geht das nicht. Ebenso bekomme ich von meiner Anwendung aus keinen Zugriff auf die DB.

Fehler - wie sollte es auch anders sein:

Fehlermeldung:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server) at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover, SqlAuthenticationMethod authType) at Microsoft.Data.SqlClient.SqlInterna…

Ports sind freigegeben - sowohl für das Profil Domain als auch Private. Ausschalten der Firewall bringt leider auch nichts.

Connectionstring sieht wie folgt aus: @"SERVER=SERVERNAME\INSTANCE;DATABASE=master;USER=USERNAME;PASSWORD=PWD;"

Ich weiß, dass der DBVisualizer schon mal andere Connectionstrings baut - wenn man z.B. Windows Authentication auswählt, kann man das so bauen, dass die Domain trotzdem mit reingenommen wird.....

Aber wo jetzt genau das Problem liegt kann ich nicht sagen. TCP/IP ist aktiviert und die richtige IP ist auch entsprechend hinterlegt.

Also kann man sagen: 🤔 schwirrt mir über dem Kopf und das seit gestern. Hat jemand einen Rat?

28.12.2020 - 22:16 Uhr

Das dürfte die Sache auf den Punkt treffen, ich hätte jetzt einen Ansatz:

Ich lasse mir ein Grid Anzeigen von dessen Elementen in ich mir das jeweilige Value anzeigen lassen. Ergibt vermutlich auch Sinn da das Ganze ja auch mehr als nur ein Gruppenrecht erhalten kann.

Danke - das wird's gewesen sein.

Was sich mir aber noch nicht ganz erschließt ist - warum geht's, wenn ich die CheckBox direkt an das Property binde? Nimmt dann der Kontext immer das erste Value oder wie verhält sich das?

Das wäre ja blöd oder kann man auch über XAML dann die Collection ansteuern? Das wäre definitiv charmant.

28.12.2020 - 17:06 Uhr

Hallo zusammen,

wünsche frohe Weihnachten gehabt zu haben.

Ich habe derzeit ein kleines Problem und weiß nicht wie ich es lösen kann.

Ich habe ein ViewModel (settingsModel). Dieses Model dient zum einen einem Window als Quelle und zum anderen auch entsprechenden Pages.

Wenn ich nun meine Page pgUserRights in einen Frame auf dem Window lade, dann setze ich den DataContext auf ein entsprechendes Objekt vom Typ settingsModel.

Bei meinem Problem ist es egal ob ich ein eigenes Objekt innerhalb der Page erzeuge oder ob ich das bereits bestehende aus dem Window als Parameter mitgebe.

Die CheckBox erhält kein Value aus einer ObservableCollection innerhalb des Models.
Wenn ich nun das Property, sprich die ObservableCollection direkt als DataContext angebe, dann werden die Werte entsprechend gesetzt.

Das hilft mir aber nicht viel weil ich die Commands etc. aus dem Model nutzen möchte.

Ich hab das über die RelativeSources schon probiert, hat aber nichts geholfen. Irgendwo scheine ich einen Denkfehler zu haben. Hat jemand von euch schon mal so einen Fall gehabt? Die Meldung im Debugger lautet:

Fehlermeldung:
Die Eigenschaft "CanAddBanks" wurde im Objekt vom Typ "ObservableCollection1&quot; nicht gefunden. Datenkontext: SettingsModel - Bindungspfad GroupRights.CanAddBanks - Ziel CheckBox.IsChecked - Zieltyp Nullable1

Besten Dank für einen Denkanstoß.

12.10.2020 - 18:48 Uhr

Ich habe das Problem jetzt auch mit einem DataGrid lösen können.

Die CollectionViewSource wird zwar nach wie vor noch im CodeBehind erstellt, aber das DataGrid kann jetzt gruppiert werden:


            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Expander IsExpanded="False">
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Name}" Foreground="WhiteSmoke" FontSize="14" VerticalAlignment="Bottom" />
                                                    <TextBlock Text="{Binding ItemCount}" FontSize="14" Foreground="Green" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" />
                                                    <TextBlock Text=" item(s)" FontSize="14" Foreground="WhiteSmoke" FontStyle="Italic" VerticalAlignment="Bottom" />
                                                </StackPanel>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle>

11.10.2020 - 19:53 Uhr

Ich hab es jetzt (vorläufig) lösen können.

Ich habe die CollectionViewSource im CodeBehind festgelegt. Dann das XAML etwas geändert:


            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Expander IsExpanded="False">
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Name}" Foreground="WhiteSmoke" FontSize="14" VerticalAlignment="Bottom" />
                                                    <TextBlock Text="{Binding ItemCount}" FontSize="14" Foreground="Green" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" />
                                                    <TextBlock Text=" item(s)" FontSize="14" Foreground="WhiteSmoke" FontStyle="Italic" VerticalAlignment="Bottom" />
                                                </StackPanel>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle>

Ich muss jetzt nur noch herausfinden, warum er bei dem TextBlock das Property "Name" akzeptiert obwohl das gar nicht existiert 😦.

11.10.2020 - 01:46 Uhr

Hallo zusammen,

ich gruppiere ein DataGrid und habe das Problem, dass der Expanderheader etwas seltsam dargestellt wird (siehe Anhang).

Mein XAML-Source schaut so aus:


   <Grid>
        <Grid.Resources>
                <CollectionViewSource x:Key="MailList" Source="{Binding Mails}">
                    <CollectionViewSource.GroupDescriptions>
                        <PropertyGroupDescription PropertyName="Sender"/>
                    </CollectionViewSource.GroupDescriptions>
                </CollectionViewSource>

                <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Expander IsExpanded="True">
                                    <Expander.Header>
                                    <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupItem}}, Source=Sender}" Foreground="WhiteSmoke"/>
                                    
                                </Expander.Header>
                                    <ItemsPresenter/>
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>

        </Grid.Resources>
        <DataGrid x:Name="dgMails" ItemsSource="{Binding Source={StaticResource MailList}}"  AutoGenerateColumns="False">
            <DataGrid.GroupStyle>
                <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                    <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <DataGridRowsPresenter />
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>
                </GroupStyle>
            </DataGrid.GroupStyle>
            <DataGrid.Columns>
                
                <DataGridTextColumn Header="Sender" Binding="{Binding Sender}"/>
                <DataGridTextColumn Header="Empfänger" Binding="{Binding Receipient}"/>
                <DataGridTextColumn Header="Betreff" Binding="{Binding MailSubject}"/>
                <DataGridCheckBoxColumn Header="Import" Binding="{Binding ToImport}"/>
                <DataGridTextColumn Header="Anlagen" Binding="{Binding HasAttachment}">
                    
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

Wenn ich


                                    <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupItem}}, Source=Sender}" Foreground="WhiteSmoke"/>

in



                                    <TextBlock Text="{Binding Sender}" Foreground="WhiteSmoke"/>


ändere, dann bleibt der Header leer weil das Property nicht gefunden wird.

Hat einer von euch eine Idee was ich da noch ändern könnte?

08.10.2020 - 21:42 Uhr

Merci Abt - das klingt genau nachdem was ich mir vorstelle.

Ich hab mir den Link schon angeschaut und da wird ja nun auch das abgebildet, was ich brauche.

Vielen Dank dafür. Wie immer - gute und schnelle Hilfe.

08.10.2020 - 21:40 Uhr

Ohne jetzt direkt eine Antwort geben zu können - warum nutzt du nicht "nur" C#.
Das wäre doch deutlich charmanter als den Umweg über VBS zu gehen.

Funktioniert das Script ohne Probleme?
In was für einer Umgebung läuft das denn?

06.10.2020 - 21:00 Uhr

Vielen Dank für dein Feedback.

Ich schau mir die WebAPI mal an und werde das entsprechend darüber abbilden - sieht erheblich komfortabler aus als die SOAP Mimik und scheint tatsächlich deutlich mehr Sinn zu machen. Sieht auf den ersten Blick deutlich besser aus 😃.

Die BLZ war nur ein Beispiel (da sind halt allgemeine Bankinfos hinterlegt --> kommen von der Bundesbank).

In der Theorie können keine Kollisionen entstehen da die Datensätze zum einen Versioniert sind und zum anderen meistens Benutzern direkt zugewiesen sind - aber man weiß ja nie 😃.

Zur Erklärung der Applikation:

Ich baue mir und meiner Familie eine Anwendung wo ich Dokumente speichere (quasi ein Lightweight DMS), Finanzen verwalte (auch Lightweight inkl. CAMT Import), E-Mails archiviere und Termine verwalte.

Das mache ich zum einen aus Lerngründen und zum anderen erspart es einfach eine Menge an Arbeit (x Programme für n Zwecke).

06.10.2020 - 20:33 Uhr

Ich werde mir die WebApi-Geschichte mal ansehen - danke schon mal dafür.

Ich nutze momentan keine DataTables - habe ich mal genutzt ist aber schon lange her.

Die Nutzung schaut so aus:

Ich hole mir z.B. Daten aus einer Tabelle BLZ. Diese Tabelle beinhaltet Infos zu Bankleitzahlen, BICS, PLZ usw. also Bankinfos.

Das Model ist dem Webservice bekannt und auch der Applikation. Ich hole die Infos über den Webservice (exemplarisches Beispiel):

       
 [WebMethod]
    
        public string GetBanks()
        {
            return JsonConvert.SerializeObject(new bankingQueries().GetBanks());
        }

Die Daten werden dann als ObservableCollection<BLZ> deserialisiert.


var banks = JsonConvert.DeserializeObject<ObservableCollection<BLZ>>(_banksResult);

Das Property Banks bekommt dann banks zugewiesen - Daten werden angezeigt.

Wenn ich nun eine Änderung durchführe muss das Model auf der Webservice Seite (egal in welcher Hinsicht) ja mitbekommen - sofern ein Speichern angestoßen wird, dass es eine Änderung gegeben hat - und genau da fehlt es gerade.

Ich könnte jetzt hergehen und bei dieser Vorgehensweise noch eine Property hinzufügen, die den aktuellen Status mitteilt. Das nutzt mir aber nicht viel wenn die Software im Multiuser Betrieb betrieben wird weil es ja dann zu Integritätsverletzungen kommen kann und auch kommen wird.

Dann müsste ich allerdings mit Transactions arbeiten - was grundsätzlich nicht schlimm ist aber in den allermeisten fällen berühre ich bei Änderungen max. 2 Tabellen.

Ich muss dazu sagen, dass es sich bei der Anwendung nicht um eine Web-App handelt sondern um eine WPF Anwendung.

Danke schon mal an dich für die Antwort 😃.

06.10.2020 - 20:21 Uhr

Hallo,

schau mal hier: Find the date Last sunday of October in ASP.NET

Damit solltest du arbeiten können.

Gruß,
Dom

06.10.2020 - 19:28 Uhr

verwendetes Datenbanksystem: <MSSQL>

Hallo zusammen,

ich bin gerade dabei eine Erweiterung für meine Applikation zu schreiben. Ziel ist es sowohl die Daten direkt in den SQL Server zu schubsen - sprich ohne Webservice und zum anderen die Möglichkeit zu schaffen die Daten über einen Webservice (ASMX) wegzuschreiben.

Die erste Methode zum erhalten von Daten wurde schon erstellt und das funktioniert auch. Daten werden abgerufen und auch dargestellt.

Wie bekomme ich es denn jetzt hin, dass ich das Model über den Webservice ändere?
Der Changetracker würde doch da nicht greifen denke ich, weil die Objekte sich ja durchaus unterscheiden können.

Ich habe da ehrlich gesagt keinen Anhaltspunkt und wäre über einen kleinen Rat sehr Dankbar.

Ich könnte hergehen und jedes Element mit dem Model vergleichen aber das nutzt mir ja Prinzipiell erstmal null weil es die Performance bei größeren Datenmengen in den Keller ziehen würde.

Habe das mal mit DataTables gemacht und da tatsächlich alles auf Änderungen überprüft aber das ist mir beim EF nicht zielführend.

Die Daten kommen als JSON vom WebService und ich würde diese auch als JSON wieder zurückschieben wollen.

Hoffe, es ist nicht zu Wirr und jemand hat eine Idee (vllt. Reflections?).

Lg,
Dom

01.10.2020 - 21:51 Uhr

Soweit ich weiß ist UTF-7 das default encoding für CSV Dateien via Excel.
Native Dateien wie xlsx etc sind UTF-8.

Excel generell zu erwähnen ist etwas irreführend finde ich.

Bei CSV wird vermutlich aufgrund der nur spärlichen Möglichkeiten Sonderzeichen zu behandeln eben auf ein ASCII-nahes Encoding gesetzt; meine Vermutung.

CSV nutzt primär UTF-7 wobei das auch nicht in einer RFC festgeschrieben ist. Wobei das Format CSV auch oftmals nicht korrekt nach RFC 4180 angewendet wird. Da kommen dann Piper (|), Simikola (;), Doppelpunkte etc. zum Einsatz wobei per Definition es ja eigentlich ein Komma sein sollte.

01.10.2020 - 21:40 Uhr

Hallo Frank,

also grundsätzlich ist es ja auch ein Thema mit welchem Durchsatz das entsprechende Laufwerk NETTO arbeitet.

Das Kopieren kleinerer Dateien dauert grundsätzlich länger das als Kopieren von Größeren. Kannst du auch einfach mal leicht im Explorer probieren und die Zeiten vergleichen.

Schau mal hier: File.Copy vs. Manual FileStream.Write For Copying Files

Das fand ich z.B. ganz hilfreich.

30.09.2020 - 20:50 Uhr

Auch wenn das für dich jetzt ggf. nicht wirklich Konstruktiv ist - aber warum nutzt du nicht WPF?

Das ist in der Hinsicht deutlich einfacher zu handeln - bedeutet allerdings Einarbeitung und viel Durchhaltevermögen weil einiges auf Anhieb sehr gewöhnungsbedürftig ist.

Aber du bist deutlich flexibler......

29.09.2020 - 21:44 Uhr

Dann schau mal hier: WPF-MVVM Window auf zweitem Monitor öffnen

Ist hier aus dem Forum.

Letzter Post.

Entweder so oder du machst es so wie Abt vorgeschlagen hat: PID vom laufenden Prozess holen und dann damit arbeiten.

29.09.2020 - 21:32 Uhr

Sieht mir gerade eher danach aus, als würdest du die aktuelle Anwendung starten.....


var path = Assembly.GetExecutingAssembly().Location;

@Abt: Ist das gewollt, dass die CodeTags nur mit dem BeginnigTag erstellt werden?

29.09.2020 - 20:55 Uhr

Ist die primäre Anwendung von euch oder vom Hersteller?

Das wäre nicht schlecht zu wissen.

29.09.2020 - 20:51 Uhr

Das alles kompiliert wird ist kein Garant dafür, dass es auch funktioniert 😃.

Hast du mal Breakpoints gesetzt und geschaut ob deine Abfrage


       if (param != null)
                    {
                        if (param.DataType == typeof(Boolean))
                        {
                            DataGridViewCheckBoxCell checkBoxCell = new DataGridViewCheckBoxCell();
                            checkBoxCell.TrueValue = param.True;
                            checkBoxCell.FalseValue = param.False;
                            row.Cells["Value"] = checkBoxCell;

                            row.Cells["Value"].Value = param.Value;
                            dgvSafetyParameter.InvalidateCell(row.Cells["Value"]);
                        }
                    }

durchläuft oder ob er die überspringt weil die Bedingung nicht erfüllt ist?

Denn ohne zu wissen ob dein "param" tatsächlich ein boolscher Wert ist, kann keiner sagen ob das ok ist oder nicht.

31.08.2020 - 18:17 Uhr

Danke Papst für den Tipp.

Das ist auch ein guter Rat für ein Projekt von mir. Da SNMP ja bei den OIDs schon recht tricky ist, werde ich das mal prüfen statt für jede SNMP Trap die OIDs in den Manuals nachzulesen 😃.