Laden...

Daten aus MySQL auslesen via auf einem Server liegenden PHP Code.

Erstellt von Torsten2602 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.367 Views
T
Torsten2602 Themenstarter:in
6 Beiträge seit 2017
vor 6 Jahren
Daten aus MySQL auslesen via auf einem Server liegenden PHP Code.

Hallo,
ich bin komplett neu hier im Forum und auch noch nicht sehr lange in der C# Welt unterwegs.
Und zwar versuche ich mit einem PHP Code Daten aus einer MySQL Datenbank zu lesen und in einem DataGridView in meiner WinForm einzufügen. Das speichern auf diese Art und Weise habe ich bereits hinbekommen, nur beim Abrufen finde ich irgendwie keinen Weg.

Vielleicht gibt es hier ja jemanden, der mir dabei behilflich sein kann.
Liebe Grüße und danke schonmal im Voraus.

P
441 Beiträge seit 2014
vor 6 Jahren

Dein PHP Script muss die Daten ausgeben, diese Ausgabe musst du dann mit deine WinForm Applikation lesen.

Hierfür bietet sich soetwas wie eine WebApi an - oder einfacher gesagt, dein PHP Script konvertiert die gelesenen Daten in Json Objekte und liefert diese mittels echo aus.

T
2.219 Beiträge seit 2008
vor 6 Jahren

@Torsten2602
Oapst hat hier schon den richtigen Weg angesprochen, WebAPI mit einer Authentifizierung sollte der Ideale Weg sein.
Hier musst du sicherstellen, dass deine Anfragen auch nur für bestimmte Benutzer erlaubt sind, nicht dass jemand deine Daten abgrasen kann.

json ist hier zur Übermittlung auch das passende Format.
Anbei wäre aber noch die Frage, wie dein aktueller Code aussieht bzw. wo genau noch das Problem liegt.
Je nachdem wo das Problem liegt, kann man dann auch einen konkreten Ansatz bieten.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

T
Torsten2602 Themenstarter:in
6 Beiträge seit 2017
vor 6 Jahren

Danke für eure Denkanstöße. Ihr habt mir damit sehr geholfen. Ich habe es jetzt geschafft, dass meine Daten in einem DataGridView angezeigt werden. Ich finde jedoch nichts, wie man die einzelnen Daten in verschiedene TextBoxen verteilen kann.

public class JsonResult
        {
            public string auftragsnummer { get; set; }
            public string mieternummer { get; set; }
            public string nutzername { get; set; }
            public string strasse { get; set; }
            public string ort { get; set; }
        }
        
        private void LoadDataGridView()
        {
            string url = "http://serveradresse/loadProjects.php";
            WebClient webClient = new WebClient();
            NameValueCollection formData = new NameValueCollection();
            formData["user"] = textBoxValue;
            var responseBytes = webClient.UploadValues(url, "POST", formData);
            var response = Encoding.ASCII.GetString(responseBytes);

            var result = JsonConvert.DeserializeObject<List<JsonResult>>(response);
            dataGridView1.DataSource = result;
        }

Mit diesem Code fülle ich mein DataGridView. Wisste ihr, wie ich jetzt die oben aufgelisteten strings in jeweils eine TextBox füllen kann?

Danke schonmal.

709 Beiträge seit 2008
vor 6 Jahren

Hallo,
wo genau hängst du denn bei deinem Textbox-Problem?

Bist du sicher, dass du ASCII als Encoding willst?
Mit Umlauten sieht's da schlecht aus.

T
Torsten2602 Themenstarter:in
6 Beiträge seit 2017
vor 6 Jahren

Ich weis nicht so recht, wie ich diese einzelnen strings von oben den TextBoxen zuweise.
Sollte ich lieber mit UTF8 Encoden?

16.807 Beiträge seit 2008
vor 6 Jahren

Man sollte immer UTF-8 nutzen, wenn man kann.
ASCII ist sehr eingeschränkt und mit hoher Sicherheit nicht das, was Du hier willst.

T
Torsten2602 Themenstarter:in
6 Beiträge seit 2017
vor 6 Jahren

Ok. Danke. Habe es jetzt soweit zu UTF8 geändert. Mit meinem TextBox Problem bin ich jedoch noch nicht weiter. Ich befürchte fast, dass es etwas total einfaches ist und ich einfach zu kompliziert denke.

709 Beiträge seit 2008
vor 6 Jahren

Wie ist denn dein aktueller Ansatz?

T
Torsten2602 Themenstarter:in
6 Beiträge seit 2017
vor 6 Jahren

Danke an alle. Ich habe es doch geschafft. Es funktioniert jetzt alles soweit.

T
2.219 Beiträge seit 2008
vor 6 Jahren

@Torsten2602
Wenn ich dich richtig verstehe, ist dein Grid wahrscheinlich leer bzw. hat zwar die Zeilen aber zeigt keine Werte an.
Hier musst du dem Grid natürlich sagen aus welchen Properties er die Werte ziehen soll.
Ebenfalls müsstest du bei deinem Grid nach dem setzen der DataSource nochdie DataBind() Methode aufrufen, damit diese auch gebunden werden.
Falls du dies nicht machst, kenn zwar dein Grid die Datenquelle, bindet diese aber nicht automatisch.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

F
10.010 Beiträge seit 2004
vor 6 Jahren

@T-Virus:
Er benutzt ein WindowsForms DataGridView.

@Torsten2602_
Was hast du da wie gelöst.
Wenn du es so gelöst hast wie man es unter PHP machen würde ist das definitiv die falsche Lösung unter .NET.

T
Torsten2602 Themenstarter:in
6 Beiträge seit 2017
vor 6 Jahren

Also für mein DataGridView habe ich ja oben schon den Code gepostet. Der funktioniert auch weiterhin so. Für die TextBoxen habe ich jetzt diesen Code hier:

public class JsonResultProject
        {
            public string auftragsnummer { get; set; }
            public string mieternummer { get; set; }
            public string nutzername { get; set; }
            public string strasse { get; set; }
            public string plz { get; set; }
            public string ort { get; set; }
            public string auftraggeber { get; set; }
            public string datum { get; set; }
            public string uhrzeit { get; set; }
            public string wohnungsgroesse { get; set; }
            public string deckenhoehe { get; set; }
            public string anzahlbew { get; set; }
            public string tempAu { get; set; }
            public string rFAu { get; set; }
            public string hPa { get; set; }
        }

        private void btnDatenOt(object sender, EventArgs e)
        {
            if (dataGridView1.CurrentCell != null)
            {
                string project = dataGridView1.CurrentRow.Cells[0].Value.ToString();

                string url = "http://serveradresse/loadProject.php";
                WebClient webClient = new WebClient();
                NameValueCollection formData = new NameValueCollection();
                formData["user"] = textBoxValue;
                formData["auftragsnummer"] = project;
                var responseBytes = webClient.UploadValues(url, "POST", formData);
                var response = Encoding.UTF8.GetString(responseBytes);

                var result = JsonConvert.DeserializeObject<List<JsonResultProject>>(response);
                DatenOT frm = new DatenOT(lblUser.Text);
                frm.txtAuftragsnummer.Text = result[0].auftragsnummer;
                frm.txtMieternummer.Text = result[0].mieternummer;
                frm.txtNutzername.Text = result[0].nutzername;
                frm.txtStrNr.Text = result[0].strasse;
                frm.txtPlz.Text = result[0].plz;
                frm.txtOrt.Text = result[0].ort;
                frm.txtAuftraggeber.Text = result[0].auftraggeber;
                frm.dateTime.Text = result[0].datum;
                frm.txtUhrzeit.Text = result[0].uhrzeit;
                frm.txtWohnungsgröße.Text = result[0].wohnungsgroesse;
                frm.txtDeckenhöhe.Text = result[0].deckenhoehe;
                frm.txtAnzahlBewohner.Text = result[0].anzahlbew;
                frm.txtTempAuKli.Text = result[0].tempAu;
                frm.txtRfAu.Text = result[0].rFAu;
                frm.txtHpa.Text = result[0].hPa;
                frm.Show();
                Close();
            }
            else
            {
                MessageBox.Show("Bitte wählen Sie ein Projekt aus.");
            }
        }
F
10.010 Beiträge seit 2004
vor 6 Jahren

Sage ich ja, die falsche Lösung 😉

Schau dir mal DataBinding unter WindowsForms an.
Also eine BindingSource anlegen, und deren DataSource dann dein "result" zuweisen.

Diese BindingSource dann sowohl DGV.DataSource zuweisen, als auch den DataBindings des entsprechenden Controls.

Dann wird automatisch auch bei wechsel des aktuellen Datensatzes im Grid, der Datensatz in den gebundenen Controls angepasst.

16.807 Beiträge seit 2008
vor 6 Jahren

Und tu Dir nen gefallen und trenn die Verantwortlichkeiten des Codes.
Damit behälst vor allem Du den Überblick.
[Artikel] Drei-Schichten-Architektur