PhpMyAdmin SQL lekérdezések használata VS c# formos alkalmazásban tuduás hiány!

PhpMyAdmin SQL lekérdezések használata VS c# formos alkalmazásban tuduás hiány!
2021-04-15T20:07:59+02:00
2021-04-17T02:43:38+02:00
2022-10-15T21:26:00+02:00
SAttila
Irreleváns elvárások és egy kedves tanárom vezetett ide. Sajnos koránt sem adják le azt a mennyiségű anyagot amit az egy hét múlva esedékes vizsgán elvárnak. Ezt nem is titkolják, de ez van. Az autoidakta tanulás kifejezettem jól megy, viszont van ez a PhpMyAdmin + VS C# téma ami az inernet nagy ellensége. Találni egy-két jónak tűnő leírást, de mindről kiderül, hogy nem az én 8 hónapja még kódot sem látott szememnek való.
A LÉNYEG: szeretnék némi súgást olvasni arról, hogyan használhatom fel a lekérdezések erdeményét (odáig eljutok, hogy MySqlDataReader).

többek között

using System.Data; using MySql.Data.MySqlClient;
 //kapcsolat string okés
 //kapcsolat nyitav
InitializeComponent();
alatt
MySqlCommand letezikeMailcmd = new MySqlCommand("SELECT * FROM adatlap WHERE email= ' + regEmailcimTextBox.Text + '", kapcsolodas); MySqlDataReader rdr = letezikeMailcmd.ExecuteReader(); if (rdr.Read()) {
            //És innentől kezdve próbáltam sok mindent, de nem tudom kinyerni belőle az infót.

}
--------------------------------------------------------------------------------------------------------

string vezeteknev = vezeteknevTextBox.Text; string keresztnev = keresztnevTextBox.Text; string email = regEmailcimTextBox.Text.ToString(); string jelszo = regJelszoTextBox.Text.ToString(); string lakcimirsz = irszamTextBox.Text.ToString(); string lakcimtelepules = telepulesTextBox.Text.ToString(); int kod = 0; string statusz = "";
//A tanáraim a következőre csak annyit mondtak, hogy szintaktiki hiba. Én kb már mindennel              próbálkoztam, többek közt az AltGr+7 -es aposztrófal is.
//Localhoston PhpMyAdmin sql felületén működött is egy pár, de vs -ből egy sem.
string regisztracioString = "INSERT INTO `adatlap`(`felhasznaloID`, `vezeteknev`, `keresztnev`, `email`, `jelszo`, `lakcimirsz`, `lakcimtelepules`, `kod`, `statusz`)" + "VALUES(NULL, '"+vezeteknev+"', '"+keresztnev+"', '"+email+"', "+jelszo+"', '"+lakcimirsz+"', '"+lakcimtelepules+"', '"+kod+"', '"+statusz+"')"; try { MySqlCommand regisztracioCmd = new MySqlCommand(regisztracioString, kapcsolodas); MySqlDataReader myReaderMinden = regisztracioCmd.ExecuteReader(); MessageBox.Show("Jelentkezz be!", "sikeres regisztráció", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Bármi segítségnek, útmutatásnak nagyon örülnék
Mutasd a teljes hozzászólást!
Ezzel a $jeles és kapcsos zárójeles szintaktikával még nem is találkoztam.

String interpoláció a hivatalos neve. Ha stringbe akarsz befűzni valamit, csinálhatod ezt:

int count = 10; string str = "There are " + count + " entries".

String esetében a + nem egy overload-olt operátor, hanem egy beépített nyelvi szerkezet, amelyet a fordító kicserél a String.Concat megfelelő alakjára. Jelen esetben a String.Concat(object, object, object) fog meghívódni. Ez azt csinálja, hogy minden objektumra meghívja a ToString metódust.

Csinálhatod azt, hogy megadod a stringet, amit látni szeretnél, és teszel bele egy jelölőt, hogy ezt az adatot ide helyettesítse be:

string str = String.Format("There are {0} matching entries out of {1} records.", 5, 10); //{0} helyére 5, {1} helyére 10 kerül.


Vagy van a string interpoláció, ami az előbbinek az egyszerűsítése:

int count = 10; int matching = 5; string str = $"There are {matching} matching entries out of {count} records.";
Mutasd a teljes hozzászólást!

  • ^AZ ADATBÁZIS TÁBLA A FENTIEKHEZ^

    CREATE TABLE `adatlap` ( `felhasznaloID` int(15) NOT NULL, `vezeteknev` varchar(50) COLLATE utf8_hungarian_ci NOT NULL, `keresztnev` varchar(50) COLLATE utf8_hungarian_ci NOT NULL, `email` varchar(50) COLLATE utf8_hungarian_ci NOT NULL, `jelszo` varchar(255) COLLATE utf8_hungarian_ci NOT NULL, `lakcimirsz` int(4) NOT NULL, `lakcimtelepules` varchar(50) COLLATE utf8_hungarian_ci NOT NULL, `kod` mediumint(50) NOT NULL, `statusz` text COLLATE utf8_hungarian_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci; -- -- A tábla adatainak kiíratása `adatlap` -- INSERT INTO `adatlap` (`felhasznaloID`, `vezeteknev`, `keresztnev`, `email`, `jelszo`, `lakcimirsz`, `lakcimtelepules`, `kod`, `statusz`) VALUES
    Mutasd a teljes hozzászólást!
  • "SELECT * FROM adatlap WHERE email= ' + regEmailcimTextBox.Text + '"
    Ez itt tényleg szintaktikailag hibás. Helyesen:

    $"SELECT * FROM adatlap WHERE email='{regEmailcimTextBox.Text}'"
    Még helyesebben: felhasználótól jövő adatot SOSEM rakunk bele közvetlenül SQL lekérdezésbe. Majd olvasgass arról, hogy miképp lehet paraméterezett lekérdezéseket csinálni.

    Még-még helyesebben:

    $"SELECT COUNT(*) FROM adatlap WHERE email='{regEmailcimTextBox.Text}'" rdr.Read(); int numberOfRecordsWithThisEmail = rdr.GetInt32(0); //ha ez a szám 0-nál nagyobb, már regisztráltak ezzel az e-mail címmel.


    Esetleg ezt is csinálhatod (ha már van alattad egy SQL adatbázis):
    1) Tegyél unique constraint-et az email mezőre.
    2) Ne foglalkozz azzal, hogy regisztráltak-e már ezzel az e-mail címmel, mert...
    3) ... ha már regisztráltak, és beküldesz egy új INSERT-et ugyanazzal az e-mail címmel, az INSERT nem fog sikerülni.

    Ne felejtsd el a readereket lezárni/dispose-olni!
    Mutasd a teljes hozzászólást!
  • Köszönöm! :) Ezzel a $jeles és kapcsos zárójeles szintaktikával még nem is találkoztam. Nagyon remélem, hogy így működni fog.
    Unique constraint-et nem mernék egyelőre használni, mert nem vagyok még annyira biztos magamban, hogy az insert azért nem sikerült. :D
    Nagyon köszönöm a segítségedet!
    Mutasd a teljes hozzászólást!
  • Ezzel a $jeles és kapcsos zárójeles szintaktikával még nem is találkoztam.

    String interpoláció a hivatalos neve. Ha stringbe akarsz befűzni valamit, csinálhatod ezt:

    int count = 10; string str = "There are " + count + " entries".

    String esetében a + nem egy overload-olt operátor, hanem egy beépített nyelvi szerkezet, amelyet a fordító kicserél a String.Concat megfelelő alakjára. Jelen esetben a String.Concat(object, object, object) fog meghívódni. Ez azt csinálja, hogy minden objektumra meghívja a ToString metódust.

    Csinálhatod azt, hogy megadod a stringet, amit látni szeretnél, és teszel bele egy jelölőt, hogy ezt az adatot ide helyettesítse be:

    string str = String.Format("There are {0} matching entries out of {1} records.", 5, 10); //{0} helyére 5, {1} helyére 10 kerül.


    Vagy van a string interpoláció, ami az előbbinek az egyszerűsítése:

    int count = 10; int matching = 5; string str = $"There are {matching} matching entries out of {count} records.";
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen! :) Életet mentettél. Minden működik.
    Mutasd a teljes hozzászólást!
  • Ha lehet még kérdésem akkot tennék föl.:)
    Mi a legegyszerűbb megoldás arra, hogy egy bool értéket a sikeres bejelentkezés után követően átadjak a fő formomnak?

    Valahogy így értem:

    bejelentjezesForm:
        
            //sikeres bejelentkezés       
    bool bejelentkezett = true;

    FőForm:

    //if (bejelentkezett == true) { valamiLinkLabel.Enabled = true; }
    Tehát csak változónak az értékét szeretném átvinni egyik formról a másikra. Ennek mi a legegyszerűbb módja? Az eddig talált leírások mind nagyon bonyolultak voltak:(
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd