Laden...

Forenbeiträge von ck82 Ingesamt 34 Beiträge

26.09.2022 - 17:01 Uhr

Super, danke für die Hilfe.
Habe da einen Auswahl-Pfeil.

Thema kann geschlossen werden.

26.09.2022 - 16:48 Uhr

Hallo liebes Forum,

ist es möglich, in der Entwursansicht von Visual Studio (Win-Forms-Entwurfs-Ansicht) ein bestimmtes Element anhand des Namens auszuwählen, ohne dieses zu sehen.

Beispiel:

Element ist im Hintergrund und von anderen Elementen verdeckt.
Im Projekt-Mappen-Explorer ist es zwar zu finden unter .Designer

Problem ist nur die Übersicht ist nicht nach dem Alphabet sortiert und hierüber kann ich nicht das Forms-Element auswählen.

Hoffe ihr versteht mein Problem.

Gibt es hier eine Möglichkeit / Ansicht, o.a.?

Vielen Dank im Voraus.

MfG
ck

30.09.2020 - 18:38 Uhr

Keiner hier kann hellsehen, welchen Wissenstand Du hast.

// Siehe erster Beitrag
Hallo liebe Pro`s,
hoffe ihr könnt einem Noob etwas unter die Arme greifen.

Solltest Du einen Begriff nicht kennen, was jedem von uns passiert, dann kann man danach eben googlen (gern zuerst)

Künftig werde ich alles Googlen, strengt deutlich weniger an UND bringt leider mehr.

Da kann man aber auch antworten: dafür hättest Du keinen Thread gebraucht.

Sorry, versteh dich einfach nicht

Wenn Du eine Antwort nicht verstehst, dann frag nach.

Was meinst du mit "kann man aber auch antworten"?

Sorry - ich bin raus. Hab keine Lust mehr auf den F... hier.
Normale Diskussion und vernünftige Antworten sind hier leider nicht möglich.

Bitte den Thread schließen.
Kommt leider nichts vernünftiges mehr raus.

Und ich dachte mit meiner Danksagung hätte ich bereits ein versöhnliches Ende gefunden.

30.09.2020 - 17:31 Uhr

Hallo an alle,

@ MrSparkle - sorry, hab einiges zu tun und bekomme von euch auch nicht grade wenig und einfache Hausaufgaben. Natürlich bin ich an Lösungen interessiert, nur finde ich weder den Weg noch das Ziel.

Kurz vorab ich bin kein Programmierer oder Entwickler, sondern mache das Ganze als Hobby. Aber ich verstehe oft nicht was ihr schreibt und muss erstmal recherchieren.

Beispiel:

Abt schrieb am 25.09. auf meine Frage:
Im dümmsten Fall eine Race Condition
--> Problem - was ist eine Race Condition???
--> Google + mein Buch Visual C# 2015

Zudem Zeitpunkt hatte ich parallele und asynchron nicht verstanden und fällt mir leider immer noch schwer. Denn es gibt Asynchrone-Programmierung die nicht asynchron ist und Parallele-Programmierung die nicht parallel ist.

Es folgte die Aussage ich soll besser erklären, habe ich versucht.

Im Grunde hätte mir aber als Antwort bereits ausgereicht das B zutrifft.
Die Änderungen am Objekt wirken sich auf den Task aus und umgekehrt.

--> Ergebnis es wird mit dem Task kein neues Objekt erzeugt, sondern das alte durchgereicht.

Wäre bei mir aber kein Problem, weil ich das Objekt eigentlich bis zum nächsten Schleifendurchgang unverändert bleibt. Somit müsste ich nur am Ende der Schleife warten.

Beispiel:


foreach (var objekt in Objekte)
{
// Mach hier einiges

// Jetzt geändert statt nur TASK.RUN

// erster Prozessor arbeitet weiter im Haupt-Programm
// zweiter Prozessor arbeitet meinen Task ab
var meinTask = Task.Run(() =>  MeinTask(objekt)); // Hier arbeitet der Task mit zweitem Prozessor ohne Objekt zu ändern

…..
….
// Hier macht mein Hauptprogramm sachen ohne das Objekt zu ändern.



// Jetzt ist das Hauptprogramm fertig
// Problem – sollte der Task noch nicht fertig sein (unwahrscheinlich) würde es bei Beginn der Schleife ein neues Objekt werden und somit den bestehenden Task ändern.
// Daher hier eine Pause bis fertig
meinTask.Wait();
}


Die Aussage von Abt vom 25.09 16.48 bringt mich nur bedingt weiter.
asynchrones Problem mit Parallelität zu lösen

--> Ich versteh leider den Unterschied nicht.

Klar Parallelität läuft gleichzeitig zum bestehenden Programm, aber Asynchron doch auch?!?

Natürlich kann ich auch
myThread = new Thread(meinObjekt)
und await machen

Aber dann würde es „meinObjekt“ beim nächsten Schleifendurchlauf doch auch ändern.

Der Hinweis auf einen Artikel mit „Drei-Schichten-Architektur“ brachte mich leider nicht weiter. Man könnte mir auch einen Link zu einem Buch in Amazon schicken. Würde mir genauso helfen. Am besten noch als affiliate link (nur spaß).

Kritik wie die vom Abt vom 28.09.2020 – 13.52 bringt halt nichts.
Was bringt es das Problem genannt zu bekommen, wenn man nach einer Lösung sucht?

Ein einfaches versuch doch:
myThread = new Thread(meinObjekt)

und dort im Thread machst du ein neues meinObjekt und weißt das übergebene zu.
Dann hast du eine Kopie und der Hauptthread änderst sich nicht.

@ T-Virus – danke für deinen Hinweis.
Werde mich bei Gelegenheit mal in Bulk Inserts einarbeiten.
Vermutlich aber nicht notwendig, da das Programm als Service arbeitet und in der Regel weniger als 100 Objekte in der Minute verarbeitet.

@JimStark, es muss nicht Parallel laufen. Im übrigen läuft es nicht Parallel.ForEach, sondern aus einer normalen ForEach-Schleife möchte ich eine weitere Verarbeitung starten (egal ob Thread oder Task).
Ziel ist es meine zwei Prozessoren auszulasten und das Programm zu beschleunigen.
Das müsste aber bei beiden passieren?!?

Problem es gibt keine einfache Beschreibung was der Unterschied zwischen Parallel und Asynchron ist.

Ohne solche Sätze wie:
Parallele Verarbeitung vs. Order Preservation sind gegensätzliche Anforderungen.
Das Einhalten einer Order ist extrem kostenintensiv; daher gibt es weder in PLINQ noch in der TPL entsprechende Funktionalitäten

Man könnte auch japanisch mit mir sprechen, würde ich genau soviel verstehen.

Egal, ich werde weiter lesen, suchen, youtube-Videos schauen und hoffentlich eine Antwort finden.

Bei euch allen möchte ich mich für eure Unterstützung bedanken und auch wenn ich Kritik an Abt ausgesprochen habe, hinsichtlich der für Anfänger weniger geeigneten Antworten, möchte ich mich auch bei Abt bedanken. Nicht zuletzt, dass er hier für das Forum wirklich viel macht und immer schnell Antwortet. Hoffe ich bin mit meiner Frage keinem auf die Füße getreten.

Gruß
ck

28.09.2020 - 15:06 Uhr

Der einzige Fehler ist/war, die Frage wurde im falschen Forum gestellt.

Leider hat mycsharp.de eine toxische Art zu antworten. Insbesondere der im Impressum stehende Abt selbst. Wenn man keinen Bock auf Forum hat, dann sollte man Forum sein lassen.

Es gibt so tolle Foren im Internet wie "Stockoverflow" und viele weitere.

Andererseits hat man da den Eindruck, dass die Mitglieder wirklich helfen wollen, tolle Beispiele und Tipps posten.

Die Leute merken ob jemand eine Berufsprogrammierer oder Hobbyprogrammier ist.
Ob jemand Anfänger oder Profi ist.

Und entsprechend sollten auch die Antworten auffallen.

Wenn jemand keinen Bock hat, etwas zum hundertsten mal zu erklären, dann ist ein Forum einfach der falsche Ansatz. Ein statisches Tutorial wäre vieleicht der bessere Weg gewesen?!?

Natürlich gibt es auch immer Leute die sich bemühen und Antworten, wie chillic, witte oder auch einige andere. Leute die sich wirklich bemühen und auf die Frage eingehen, Lösungen suchen / aufzeigen und kommunizieren.

Leider reagiert Abt nur meistens immer als erstes und dann auf seine unbeschreibliche Art.

Sehr schade für dieses Forum und jetzt bin ich gespannt wie lange der Abt den Post erträgt.

25.09.2020 - 16:58 Uhr

Das Programm läuft die Schleife 1000 mal durch.

Dann produziert es 1000 Tasks.

z.B.

Task 1000
Task 999
Task 998
...

Das Programm müsste die Task nacheinander abarbeiten wie aufgerufen.

Wenn ich jedem Task nun FIX seinen Wert mitgeben könnte, dann würde es so aussehen.

Task 1000 (FIX 1000) --> D.H. in Datenbank Wert = 1000
Task 999 (FIX 999) --> Datenbank Wert = 999
Task 998 (FIX 998) --> Datenbank Wert = 998
...

Der Task müsste nur mit einen neuen Objekt arbeiten, was unabhängig ist vom Programm. Und das würde mich interessieren ob hier jemand eine Idee hat.

Voreil wäre Programm ist bereits bei 0 und im panding sind noch X Tasks mit den jeweils FIXEN Werten zum speichern.

Oder liege ich hier komplett daneben?

In dem Fall müsste ich vermutlich das ganze Programm synchron laufen lassen.
Dann müsste das Programm halt immer auf die Datenbank-Speicherung, etc. warten. Und das Programm (der Hauptteil) würde langsamer durchlaufen.

25.09.2020 - 16:45 Uhr

Noch etwas realistischer dargestellt.
So etwas würde mein Programm arbeiten (stark vereinfacht)

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskRunTestLoeschen
{
    class Program
    {
        static void Main(string[] args)
        {
            // meine Klasse
            meineKlasse mek = new meineKlasse();
            // wert 1000
            mek.test = 1000;
            

            for (int i = 1000; i > 0; i--) 
            {
                /*
                 Hier sind irgendwelche Bearbeitungen
                 */
                mek.test = i;

                Task.Run(() => MeinTask(mek));

                               
                Console.WriteLine("Der Wert von MEK im Programm ist: " + mek.test);
                
                /*
                 Weitere Bearbeitungen
                 */
            }
            Console.ReadKey();

        }
    



        private static async void MeinTask(meineKlasse mek)
        {
            // Speichere etwas in die SQL-Datenbank

            string abfrage = "INSERT INTO Datenbank (Felder1) VALUES (@Value);";
            using (connection = new SqlConnection(connectionString))
            {
                connection.Open();                
                // usw......
            }
    }



    public class meineKlasse
    {
        public int test { get; set; } 
    }
}

 

Ich war der Meinung es arbeitet die Schleife ab und öffnet nacheinander 1000 Tasks.

Beim ersten Task würde 1000 mitgegeben
beim zweiten Task würde 999 mitgegeben
usw.

Aber jetzt läuft es so es gibt beim ersten Task 1000 mit
Wenn der Task jetzt aber länger dauert, dann würde das Progr.
beim zweiten Task vieleicht 990 mitgeben
--> Somit bereits die Werte vom 10 Task

25.09.2020 - 16:29 Uhr

Nachfolgend der kurze Test von eben.
Gibt es eine Möglichkeit, das ich in Task eine Kopie erhalte, welche sich nicht auf das Hauptprogramm auswirkt.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskRunTestLoeschen
{
    class Program
    {
        static void Main(string[] args)
        {
            meineKlasse mek = new meineKlasse();
            mek.test = 1000;
            Task.Run(() => MeinTask(mek));

            for (int i = 1000; i > 0; i--) 
            {
                Console.WriteLine(mek.test--);
                Console.WriteLine("Der Wert von MEK im Programm ist: " + mek.test);
            }
            Console.ReadKey();

        }
    



        private static async void MeinTask(meineKlasse mek)
        {
            List<int> intList = new List<int>();
        
            for(int i = mek.test; i > 0; i--) 
            {
                mek.test = 5000;            
                System.Threading.Thread.Sleep(1);
            }
            System.Threading.Thread.Sleep(20000);
            for(int i = 0; i < intList.Count; i++) 
            {
                Console.WriteLine(intList[i]);
                Console.WriteLine("Der Wert von MEK im Task ist: " + mek.test);
                Console.WriteLine("Der Wert von MEK im Task ist erhöht: " + (mek.test+i));
            }
        }

    }



    public class meineKlasse
    {
        public int test { get; set; } 
    }
}


 
25.09.2020 - 16:09 Uhr

Hallo Abt,

hab grad eben mal schnell in einem kleinen Programm nachgestellt und es ändert mir meine Werte vom Objekt im Hauptprogramm. Somit eigentlich nicht zu verwenden.

Mein Hauptprogramm arbeitet in einer Schleife Objekte ab.

Mit dem Task wollte ich Zeit sparen. Der Task soll einfach ein paar Sachen in einer SQL-Datenbank speichern. Das ganze ausgelagert als Task, da dieser vom Programm unabhängig arbeiten sollte.

Problem ist nur, wenn das Hauptprogramm die neuen Daten lädt (wieder am Anfang der Schleife) und wie jetzt auch bestätigt überschreibt, speichert es mir in dem Task ggf. zwischenzeitlich geänderte Daten.

Hoffe die Erklärung war einigermaßen verständlich.

Gruß
ck

25.09.2020 - 15:06 Uhr

Hallo liebe Pro`s,

hoffe ihr könnt einem Noob etwas unter die Arme greifen.

Stellen wir uns vor ich habe ein Objekt meiner Klasse generiert

MeineKlasse meinObjekt = new MeineKlasse();

Nun möchte ich zum einen unabhängig vom bestehenden Programmlauf einen Task starten und meinObjekt übergeben:

Task.Run(() => meinTask(meinObjekt));

Der Task arbeitet nun mit den Daten von meinemObjekt.

Gleichzeitig läuft das Programm weiter und modifziert ebenfalls meinObjekt.
Wie wirkt es sich auf "meinObjekt" aus?

A: Es wurde eine Kopie (bzw. ein neues unabhängiges Objekt) erstellt und Änderungen egal an welchem der beiden Objekte wirkt sich nicht auf das jeweils andere aus.

B: Änderungen der einzelnen Objekte würde auf das andere auswirken. Z.B. würde im Task ein enthaltener string geändert, würde es in dem anderen Objekt die Daten des Task enthalten?

Hoffe ihr könnt mir helfen.

Gruß
ck

30.11.2019 - 22:18 Uhr

Vielen Dank für eure Antworten und die Unterstützung.

Werde keine Aufteilung vornehmen.

Euch ein schönes WE.

Gruß
ck

30.11.2019 - 16:21 Uhr

Hallo liebe Datenbank-Pro`s,

werden in einer MS-SQL-Datenbank für leere Werte Speicherplatz reserviert und auch verbraucht oder nur verbraucht wenn auch ein Inhalt eingesetzt wurde?

Bin am überlegen eine Datentabelle mit den folgenden Musterdaten aufzuteilen auf eine Tabelle und mehrere Unter-Tabellen die eine Referenz zu ersten Tabelle haben.

Nachteil die Abfrage wird aufwendiger, würde sich nicht lohnen, wenn leere Daten keinen Speicherplatz verbrauchen.

Sollten die Speicherplatz verbrauchen würde sich eine Aufteilung evtl. lohnen?

So würden die Daten z.B. aussehen. Die DateTime benötige ich aber nur bei jeder 10 Eintragung. Somit würde ich neun mal Platz verbrauchen ohne diesen überhaupt zu benötigen.

ID
3 x String
2 x Int32
4 x DateTime
2 x Bool

Beispiel aufgeteilt

Master:
ID
3 x String
2 x Int 32
2 x Boll

Slave:
ID
Slave_Master_IdRef
4 x DateTime

Ab wie viel Datensätzen würdet Ihre eine Aufteilung vornehmen?

Hoffe ich bekomme von euch guten Input.

Vielen Dank im Voraus

Gruß
ck

10.10.2019 - 12:48 Uhr

Liebe Profis,

ich habe ein web.api-Host geschrieben, welcher aktuell noch von einer OleDbConnection (Access-Datei) Daten abholt und an die Clients verteilt.

Bisher hatte ich bei jeder Anfrage seitens des clients die OleDbConnection geöffnet.

Nun habe ich es umgestellt auf eine einzige OleDbConnection in static, welche von jeder Abfrage genutzt wird.

Dies sollte beheben, dass wenn mehrere clients gleichzeitig anfragen stellen, dies zu einem Fehler führt, da OleDbConnection bereits geöffnet.

Ist es ok, wenn man eine einzige OleDbConnection für das Programm nutzt oder habt ihr Erfahrungen welche eher zu einzelnen öffnen rät?

Ist es möglich eine OleDbConnection den ganzen Tag offen zu halten?

Hoffe auf guten input von den Profis.

Gruß

ck

10.05.2019 - 11:36 Uhr

Vielen Dank für eure Antworten.

Besonders @LaTino vielen Dank für deine Mühe den Service nachzubilden.

Von Fiddler hatte ich bereits im Bereich Web-API gehört, aber die Idee diesen Test durchzuführen ist mir nicht gekommen. Und deine Anwendung SOAPUI war mir bisweilen vollkommen unbekannt.

Mit deiner Rückmeldung als Absicherung habe ich mich nun an die Mail-Adresse gewandt.

Die Antwort hilft mir nicht wirklich weiter:

Dear Sir,

We acknowledge receipt of your e-mail.
Please note the disclaimer published at
>
.

Messages with deviations from the sample format will be rejected.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ev:validateEORI xmlns:ev="http://eori.ws.eos.dds.s/">
<ev:eori>SE123456</ev:eori>
<ev:eori>FR123456789</ev:eori>
</ev:validateEORI>
</soap:Body>
</soap:Envelope>

Please confirm if this recommendation is solving your problem.

Best regards,

European Commission
DG Taxation and Customs Union
Unit B3 - Customs systems

09.05.2019 - 14:23 Uhr

Hallo liebe Pro`s,

bin Anfänger im Bereich der Programmierung und versuche gerade in eine Windows-Forms c#-Anwendung eine Überprüfung einer EORI-Nummer zu integrieren.

Ich möchte diese Webseite prüfen: https://ec.europa.eu/taxation_customs/dds2/eos/validation/services/validation?wsdl

Im Web habe ich ein Muster gefunden, wo jemand das umgesetzt hat. Bekomme dies aber nicht zum laufen. Bei mir generiert der Code Fehler.

https://stackoverflow.com/questions/54551338/c-sharp-issue-calling-eori-soap-service

Anschließend habe ich mir Service References angeschaut und dort klingt die Umsetzung auch sehr einfach.

https://www.youtube.com/watch?v=jmJW822larw

Was in dem Video ganz einfach ist stellt sich aber bei mir scheinbar schwieriger da.

Hab zwar jetzt Klassen wie "eoriValidationResult"; "EORIValidationClient"; "eoriResponse" und so weiter, bekomme aber keine vernünftige Abfrage hin.

Name.EORIValidationClient client = new Name.EORIValidationClient();

Bei client.validateEORI muss ich ein string[] übermitteln.
Verstehe aber nicht was von mir gewünscht ist.

Hoffe meine Beschreibung ist nicht zu konfus und jemand kann mir etwas unter die Arme greifen.
Hinweis: Ich bin nicht zu faul zu suchen. Bin bereits seit 2 Tagen auf der Suche und nun melde ich mich erst an euch. Ich will nicht das ihr meine Arbeit macht, aber evtl. könnt ihr mir etwas Klarheit schaffen oder Anregungen bringen.

Freue mich auf eure Antworten und danke euch bereits jetzt für jegliche Unterstützung.

Gruß

ck

Ergänzung: Im Grunde will ich nur eine Abfrage machen ob die EORI valid ist oder auch nicht.

Beispiel der Eingabe im Webformular mit Ergebnis not valid:
https://ec.europa.eu/taxation_customs/dds2/eos/eori_validation.jsp?Lang=de&EoriNumb=DE1234567&Expand=true

06.03.2019 - 14:26 Uhr

Hallo an alle,

möchte euch allen für eure Beiträge danken.

Hatte gehofft mir etwas Arbeit zu sparen, werde aber vermutlich nicht drum herumkommen.

Den Vorschlag von Abt werde ich mit unserem System-Admin mal prüfen (WAN Compression).
Aber nach erstem Telefongespräch wird das nicht viel bringen und daher müssen wir vermutlich den Weg über Änderung der Programme gehen.

Blöd für mich ist nur, dass ich zwei Programme ändern muss. Eine Windows-Dienst-Anwendung und eben die GUI-Anwendungen der User (win Form).

Heißt SQL aufsetzen, Windows-Dienst-Anwendung und GUI-Anwendungen anpassen.
Am besten gleich noch in Verbindung mit WebAPI wie von T-Virus vorgeschlagen.

Alternativ werde ich den Vorschlag von Mallett umsetzen. Wenn ich mich sowieso mit WebAPI beschäftigen muss, könnte ich evtl. wirklich nur einen Server-Dienst zwischen schalten.

Euch allen nochmals vielen Dank für die zahlreichen Rückmeldungen und hilfreichen Vorschläge.

Gruß

ck

05.03.2019 - 14:13 Uhr

Liebe Netzwerkprofis,

hoffe auf eure Hilfe und euren Sachverstand.

Zunächst ich bin ein Neuling in C#.

Habe eine Anwendung programmiert und diese im Netzwerk verteilt.
Als Datenbank nutze ich eine Access-Datei (bitte keine Datenbank oder nicht Diskussion starten).
Mein Programm eine einfache Windows-Forms-Anwendung (keine Web-Anwendung).
Die Access-Datei befindet sich auf einem freigegebene Laufwerk im Intranet.

Bei mir am Standort läuft die Anwendung flüssig und schnell.
Da auch der Datei-Abruf sehr schnell von statten geht.

Nur bei einem anderen Standort (ca. 20 km entfernt / schlechte 25000er Leitung) über Intranet, läuft die Anwendung verzögert und sehr langsam (Die Datenbank-Abfrage dauert sehr lange).

Die Abfrage sieht etwa so aus:


// Eröffnen einer neuen DB Verbindung
            OleDbConnection connectionDB = new OleDbConnection();
//Verbinden mit der Datenbank
            connectionDB.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DataDbFolder + ";Persist Security Info=False;";
            connectionDB.Open();
//Abfrage einrichten
            OleDbCommand command = new OleDbCommand();
            command.Connection = connectionDB;
// Abfrage Text übergeben / abfragen
            command.CommandText = Abfragewert;
            OleDbDataReader reader = command.ExecuteReader();

Ich weiß mit Webtechnologien würde ich bessere und schnellere Ergebnisse erzielen.

Aber dann kann ich keine Windows-Forms-Anwendung nutzen.

Habt ihr eine Idee, diese Abfrage im Intranet mit schlechter Leitung zu beschleunigen?

Das betrifft übrigens nicht nur Datenbanken, sonder auch das öffnen einfacher Dateien im Netzwerk. Wenn man von dem Standort eine Word-Datei öffnet, dauert es sehr lange, bis die Word-Datei als Kopie geladen wurde.

Evtl. gibt es auch eine generelle Beschleunigung des Intranets mit schnelleren Routern, etc.?

Würde mich über jegliche Hilfe sehr freuen.

Lieben Gruß

ck

20.08.2018 - 10:43 Uhr

Ich möchte mich bei euch allen für die nützlichen Hinweise und die angeregte Diskussion bedanken.

Besonders aber bei lhyn, die Antwort hat mir am meisten genutzt und passt hervorragend in den Thread "Grundlagen von C#".

Die anderen Überlegungen sind für mich teilweise nur schwer nachzuvollziehen. Auch wenn es, meine ich, in der Diskussion in der ersten Linie um Performance ging. Diese Überlegungen sind aber für mich als Anfänger noch zu weit. Ich möchte zunächst das mein Code funktioniert. Performance kommt bei mir noch in der zweiten Reihe. Aber sicherlich kann ich und bestimmt auch andere von solchen Diskussionen und Überlegungen lernen. Daher freue ich mich über die angeregte Diskussion und die verschiedenen Herangehensweisen.

Nochmals vielen Dank euch allen für eure Unterstützung.

14.08.2018 - 13:42 Uhr

Was wäre die weniger umständliche Alternative?

14.08.2018 - 13:13 Uhr

Hallo liebes Forum,

ich hoffe ihr könnte einem Anfänger helfen. Ich habe so meine Probleme mit Arrays.
Kurz: Ich importiere eine CSV-Datei als String [][] ([] = Jede Zeile / [][] = jede Zelle.

Nun möchte ich das ganze gerne auf verschiedene Arrays aufteilen.

Dazu würde ich einfach eine weitere Dimension anlegen.

[] = Jedes Array mit bestimmten Werten / [][] Jede Zeile mit bestimmten Werten / [][][] Jede Zelle

deklarieren würde ich wie folgt:

string [][] ArrCSV; (bereits mit Werten gefüllt)
Neu:
string [][][] RueckArr;

Folgendes würde gehen:

RueckArr[0] = ArrCSV;
// Jetzt befindet sich das komplette ArrCSV in der zweiten Dimension von RueckArr

Wenn ich aber gerne die Arrays einzeln importieren möchte, funktioniert das nicht.
Im Grunde müsste der nachfolgende Satz identisch mit vorherigem sein (in einer For-Schleife):

RueckArr[0][i] = ArrCSV[i];

Wenn ich das durchlaufen lassen - kommt eine NullReferenceExeption

Kann mir jemand einen Schubs geben?

15.06.2018 - 15:26 Uhr

Hallo,

mal eine "peinliche" Anfängerfrage.

Wenn ich ein FormsAuthentication.SetAuthCookie setzte.

Dann kann ich über User.Identity.IsAuthenticated prüfen ob der User angemeldet ist.

Ist User.Identity abhängig von meinem Cookie oder ist User.Identity global zu verwenden, dass jemand der gar nicht in meiner Seite registriert ist auf diese zugreifen kann?

Zum Beispiel registriert auf Seite X mit User.Identity zugriff mit dieser Identity auf meiner Seite?

Konnte im Web leider nichts dazu finden.

Hoffe ihr könnt einem Anfänger helfen.

Gruß

ck

23.09.2016 - 14:05 Uhr

Hallo Taipi88,

danke für deine Antwort.

Hatte die letzten Tag wenig Zeit zum Programmieren, daher erst heute eine Antwort.

Bin jetzt über DataSet gestolpert.

Damit bin ich grade am experimentieren.

Deine Artikel können aber ein gute Unterstützung sein.

Gruß

ck

23.09.2016 - 13:40 Uhr

Hallo Bernd,

danke für deine schnelle uns sehr hilfreiche Antwort!

Manchmal sieht man den Wald vor lauter Bäumen nicht.

Danke und Grüße

ck

23.09.2016 - 13:19 Uhr

verwendetes Datenbanksystem: <Access>

Liebe DB-Profis,

ich hab so meine Probleme mit Dataset. Bisher hatte ich alle Anfragen an meine Access DB einzeln erstellt. Access ist für mich nur zum üben und weil ich keine SQL-Datenbank erstellen kann. Werde später meine Access DB in eine SQL konvertieren. Microsoft stellt da ein Prog. bereit mit dem es hoffentlich ganz gut geht.

Mein Prog. werde ich dann umstellen.

So nun zu meiner Frage.

Zunächst Frage ich alld Daten einer Tablle ab:

ds = Funktion.DBAbfrage("SELECT * FROM tabel");

So sieht die Abfrage in meiner Funktion aus.
Nun müsste ich alle Daten der Tabelle in meinem DataSet (ds) haben.


try {             
                // Eröffnen einer neuen DB Verbindung
                OleDbConnection connectionDB = new OleDbConnection();
                
                //Abfrage einrichten
                OleDbDataAdapter oledbAdapter;
                DataSet ds = new DataSet();

                //Verbinden mit der Datenbank
                connectionDB.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DatenbankVzName + ";Persist Security Info=False;";
                connectionDB.Open();

                oledbAdapter = new OleDbDataAdapter(Abfragewert, connectionDB);
                oledbAdapter.Fill(ds);
                oledbAdapter.Dispose();
                connectionDB.Close();

                return ds;

            }

Jetzt möchte ich einen Wert aus meinem DataSet an eine Textbox übergeben:

tbt_frm08_P1_C1_001.Text = ds.Tables[0].Rows[0].ItemArray.GetValue(0).ToString();

Blöd ist nur das mein DataSet nicht identisch der Datenbank gefüllt wurde.

Siehe Bild: DB_Ausschnitt

Im Grunde würde ich davon ausgehen das DataSet (= Array) müsste nun wie folgt aussehen:

0 = 7
1 = 8
2 = 9
3 = 14
4 = 15
5 = 16

Aber nein - es scheint so gefüllt zu werden:

0 = 14
1 = 15
2 = 16
3 = 7
4 = 8
5 = 9

Ich verstehe leider nicht warum???

Mein Problem ist die Verwendung der Werte, bei dieser Verteilung.

Wer kann mir helfen?
Wo ist mein Denkfehler???

12.09.2016 - 22:24 Uhr

verwendetes Datenbanksystem: <Access>

Hallo Forum,

hoffe ihr könnt mir helfen, ich bin Anfänger in Programmierung und versuche mit Datenbanken klar zu kommen. Nun hab ich ein paar Fragen:

Frage 1:

Das füttern der Datenbank per Insert-Befehl ist kein Problem. Nur habe ich Referenztabellen in der Tabelle, welche ich füttern möchte.

Ich ziehe Daten aus Textboxen (i.d.R. string) - in dem Referenzfeld wird aber in der Regel ein Long-Wert benötigt.

Muss ich nun vorerst jede Referenztabelle über eine SQL-Abfrage in eine Long-Variable auslesen und die Long-Variable später wieder in meinem Insert-Befehl verwenden oder gibt es eine andere Möglichkeit, evtl. die Abfrage der Referenztabellen gleich mit in der SQL-Abfrage durchzuführen?

Habe aktuell 11 Referenztabellen --> Kleine wie "Herr / Frau" aber auch große mit mehr Werten.
Die Referenztabellen nutze ich wieder als Referenztabellen in meinen cmb.

Frage2:

Gibt es die Möglichkeit in mehren Tabellen gleichzeitig mit Werten zu füttern. Also die Haupttabelle und die Referenztabelle oder müsste ich alle einzeln ergänzen?

Ergänzung:
Frage3:

Ist es möglich Abfragen (qry) der Datenbank zu verwenden, z.B. in Access erstellen und dann aus dem Programmcode heraus aufrufen???

Würde mich über eure Hilfe sehr freuen.

Vielen Dank im voraus.

ck

08.03.2016 - 01:06 Uhr

Danke euch beiden für eure Hilfe.

Werde morgen weiter kämpfen und schauen ob ich das hinbekomme.

Den nachfolgenden Code werde ich morgen nochmal genauer prüfen.

Evtl. braucht mein Prog. einfach einen Starter (Consolenanwendung), welches das Prog startet und dann die Benutzereinstellung des Programms ändert.



 class Credentials
    {
        
        private static SecureString MakeSecureString(string text)
        {
            SecureString secure = new SecureString();
            foreach(char c in text)
            {
                secure.AppendChar(c);

            }
            return secure;
        }


        public static void RunAs(string path, string username, string password)
        {
            try
            {
                ProcessStartInfo myProcess = new ProcessStartInfo(path);
                myProcess.UserName = username;
                myProcess.Password = MakeSecureString(password);
                myProcess.WorkingDirectory = @"C:\Windows\System32";
                myProcess.UseShellExecute = false;
                Process.Start(myProcess);
            }
            catch {


            }

            


        }

    }

08.03.2016 - 00:16 Uhr

Im Grunde könnte ich auch über die Manifest-Datei dem Programm Admin-Rechte einräumen aber irgendwie ist das mit Kanonen auf Spatzen geschossen???

http://stackoverflow.com/questions/3598824/how-to-force-my-c-sharp-winforms-program-run-as-administrator-on-any-computer

08.03.2016 - 00:11 Uhr

Verstehe ich nicht?!?

Im Grunde möchte ich auf dem Host-System einen Ordner freigeben.

Dieser Ordner soll über Active-Directory einen neuen Benutzer erhalten.

Beispiel Benutzer AnwendungsBenutzer.

Der Client im Netzwerk meldet sich an seinem PC mit einfachem Benutzer an.
Dieser einfache Benutzer soll keine Lese- oder Schreibrechte auf dem Ordner erhalten.

Die Anwendung selbst ist bei dem einfachen Benutzer auf einem lokalen Laufwerk.
Wird mit vereinfachten Benutzerrechten gestartet werden, soll aber dann auf erweiterte Benutzerrechte wechseln.

Also sobald die Anwendung ausgeführt wird soll die Anwendung mit erweiterten Benutzerrechten (als AnwendungsBenutzer) mit dem Ordner kommunizieren (Lese/ und Schreibzugriff).

Der User selbst hat keinen Zugriff auf den Ordner aus seinem Explorer heraus.

Die Anwendung selbst kann aber auf die enthaltenen Dateien zugreifen?!?

Oder ist das nicht möglich???

07.03.2016 - 23:58 Uhr

Der Client greift nur auf seine Anwendung zu ohne Berechtigung für den Ordner.

Die Anwendung wiederum soll auf den Ordner mit höherer (nicht Admin) Berechtigung zugreifen.

Bin grade am prüfen von so was - der Kniff fehlt mir aber noch:

http://stackoverflow.com/questions/295538/how-to-provide-user-name-and-password-when-connecting-to-a-network-share

https://msdn.microsoft.com/en-us/library/w070t6ka.aspx

07.03.2016 - 23:29 Uhr

Hallo nochmal,

leider komme ich trotz suchen nicht zum Stein der Weisen und hoffe auf eure Unterstützung.

Mein Problem ist ich habe eine Anwendung welche eigene Nutzerberechtigung erhalten soll.
Ich möchte eine Netzwerkfreigabe mit einem eigenen von mir kreierten User ausstatten.
Z.B. Im Active Directory User AnwendungX mit Lese und Schreibzugriff auf den Ordner im Netzwerk.

Von den Client aus möchte ich nun meine Anwendung starten.

Der Client selbst soll aber keinen Zugriff auf den Ordner erhalten (keine Lese oder Schreibrechte).

Gibt es eine Möglichkeit dem Programm eigene (zusätzliche) User-Berechtigung mitzugeben, damit dieser auf den Ordner und den Inhalt zugreifen kann?

Würde mich über Ihre Hilfe sehr freuen.

Gruß

ck

07.03.2016 - 21:54 Uhr

Danke euch für eure Anregungen.

Das mit den Windows Authentifizerungen muss ich mir genauer anschauen.

Ich habe einen Windows Dienst auf einer virtuellen Maschine erstellt, welcher von einem FTP-Server abholt, aus Byte-Code PDF-Dateien erzeugt und diese anschließend per E-Mail mit HTML-Templates und inline Bildern versendet.

Als Datenbank nutze ich (Achtung nicht lachen - bin Anfänger in c# --> daher kein SQL) eine einfache Access-Datei (unverschlüsselt). (Verschlüsselt hatte der Zugriff nicht funktioniert).

Server seitig arbeitet mein Windows-Dienst autark mit voller Berechtigung.

Clientseitig befindet sich ein Duplikat der Datenbank auf einem Netzwerkordner (welcher aktuell noch für die User freigeben ist). --> Habe bereits nach Anwendungsseitiger User-Berechtigung gesucht - nur leider nichts vernünftiges gefunden.

Nun habe ich die Möglichkeit die Passwörter der User per MD5 zu verschlüsseln, schließlich können die Clients ihre Passworter ändern und ich möchte diese nicht im Klartext haben (könnte zweckentfremdet werden). Somit wären die Passwörter zumindest für die Clients relativ sicher.

Wenn ich nur meinem Programm einen eigenen User erstellen kann, dann kann ich diesen auf den Client-Computern ausführen. Somit hätte der Client selbst keinen Zugriff auf die Netzwerkfreigabe, die Programm hätte jedoch trotzdem die Möglichkeit des Zugriffs.

Hier muss ich mal googlen was ich so finde --> "Anwendung c# User-Berechtigung" oder ähnliche Stichworte erzeugen nur quatsch.

Habt ihr mir evtl. ein Stichwort?

Danke nochmals für eure Hilfe!!!

07.03.2016 - 21:32 Uhr

Hallo Papst,

danke für die schnelle Antwort.

Bedeutet ich kann nicht zurück Codieren sonder immer nur MD5 vergleichen. Also wäre es besch... Werte wie Namen, Geb.Datum, usw. in der Datenbank als MD5 zu speichern, da ich sämtliche eingeben müsste und nur vergleichen kann ob diese identisch sind.

Kannst du mir einen Anfänger geeigneten sicheren Algorithmus inkl. salting nennen?

Ich verwende meine Anwendung nur im Intranet, somit ist eine zu starke Verschlüsselung nicht notwendig, in erster Linie möchte ich die Passwörter nicht in Reinschrift abgelegt wissen.

Gruß

ck

07.03.2016 - 21:18 Uhr

Hallo,

auf der Seite

https://msdn.microsoft.com/de-de/library/s02tk69a%28v=vs.110%29.aspx

wird das erzeugen von Hash-Code beschrieben.

Leider verstehe ich die Grundlage nicht.

Ich kann einen Hash erzeugen und in meiner Datenbank speichern, z.B. mein Passwort.

Wenn ich mein Programm nun auf einem anderen PC ausführe, warum kann dieser das lesen.

Mir fehlt so der Programm eigene Hash als Gegenstück.

Also Aus Wert der Datenbank (Teil 1) und Wert in meinem Programm (Teil 2) erzeuge den Wert unverschlüsselt (Teil 3).

Wo finde ich das Programm eigene Gegenstück, die MD5.Create()-Methode müsste auf Grund irgendwelcher variablen den Teil 2 (also den Hash in meinem Programm) erzeugen, nur woher weiß ich dass dieser auf sämtlichen Computern identisch ist???

Oder kann mir jemand beim verstehen helfen?

Gruß

ck