Diskuze: C# a MySQL - select, update
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 13 zpráv z 13.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


To sis jako začátečník vzal docela náročné sousto. Osobně bych se takovému algoritmu vyhnul velkým obloukem a udělal to úplně jinak. Záleží však na tom, čeho chceš dosáhnout.
koukni se na http://www.itnetwork.cz/php/mvc a na http://www.itnetwork.cz/php/zaklady
.... z toho se to naučíš a vše pochopíš 
Je to jednoduché, stačí použít ORDER BY a LIMIT. Nevím, proč tě HoBi odkázal na PHP, ale zde si přečti o MySQL dotazech a najdi si tam jak funguje LIMIT a ORDER BY: http://www.itnetwork.cz/…ze-tutorialy
Díky všem. Upřímně PHP umím víc než C#, ale už je to hodně dlouho,
co jsem používal SQL, takže na LIMIT jsem si nevzpomněl.
Přes ORDER BY a LIMIT by to mělo jít, jdu to vyzkoušet a uvidím.
btw. konečně jsem našel skvělé fórum o programování, kde je fajn
komunita
.
ORDER BY a LIMIT řeší jen vyhledávání. Při UPDATE však může dojít k souběhu, kterému se Kuba5 chce vyhnout.
Ze zadání nevyplývá, že by aplikaci používalo více lidí najednou nebo že by to měl nějakým způsobem řešit. Může to dát do transakce, ale IMHO to nepotřebuje řešit.
"...program bude používat více lidí najednou a nesmí se stát, aby se více lidem objevily dvě stejná čísla..."
Vidím v tom spíš chybu v návrhu a dokud nenapíšeš, k čemu to vlastně potřebuješ, nemám jak poradit.
Mělo by to sloužit jako "přidělovač čísel" uživatelům aplikace.
Těch čísel je omezený počet a čísla jsou daná (v tomhle případě jsou
uložená v databázi). Každý uživatel ale musí dostat jiné číslo. Jinak
to neprobíhá rychle, program se používá občas.
Jasně, že by stačilo k aplikaci přiložit textotvý soubor, tam napsat
čísla a hotovo, ale to nejde, protože jak už jsem řekl, nemělo by se
stát, aby měli dva uživatelé stejné číslo.
Bylo by to už vyřešené, kdybych věděl, jak si poradit s tím
UPDATEM(nastavení used na 1).
Ještě bych potřeboval poradit, jak definovat to číslo, které jsme
vybrali přes SELECT, abych ho potom mohl použít v UPDATE. Nejde brát to
číslo z labelu, protože v labelu mám číslo třeba 6132, kliknu na
tlačítko, provede se jen UPDATE a u tohoto čísla (6132) se zapíše used =
1. Kliknu znovu na tlačítko a ukáže se konečně další číslo (6133), ale
zase ten stejný koloběh.
Zkrátka mi jde o to, že se obě operace (UPDATE starého čísla, které je v
labelu a následně SELECT čísla, kde je used = 0).
Jak toho prosím docílit? Jsem v C# fakt začátečník a tak pořád jen
zkouším, zkouším, kódy samozřejmě nevypadají dobře, ale za to mi teď
prosím nenadávejte. 
Ještě se trošku vrátím k tomu řešení. Chápu, že to není nejlepší
řešení, ale zatím bude dostačovat, ono až tolik vadit nebude, když budou
mít 2 uživatelé stejné číslo, brzy to zjistí a prostě někdo klikne na
tlačítko znovu a už to bude ok.
Tady kód:
private void button1_Click(object sender, EventArgs e)
{
string input = label1.Text.Trim();
string conn = "server=46.28.110.147;user=________;password=_____;database=_______;";
MySqlConnection myconn = new MySqlConnection(conn);
string sql = "SELECT numbers FROM domestic WHERE used=0 ORDER BY numbers LIMIT 1";
string sq2 = "UPDATE domestic SET used = 1 WHERE numbers = '" + label1.Text +"'";
MySqlDataAdapter da = new MySqlDataAdapter(sql, myconn);
MySqlCommand cmd = new MySqlCommand(sq2, myconn);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count == 0)
{
MessageBox.Show(input + "Error", "Error");
}
else
{
myconn.Open();
cmd.ExecuteNonQuery();
myconn.Close();
label1.Text = dt.Rows[0][0] + "";
}
}
Díky.
Vyřešeno:
private void button1_Click(object sender, EventArgs e)
{
string input = label1.Text.Trim();
string conn = "server=46.28.110.147;user=;password=;database=;";
MySqlConnection myconn = new MySqlConnection(conn);
string sql = "SELECT numbers FROM domestic WHERE used=0 ORDER BY numbers LIMIT 1";
MySqlDataAdapter da = new MySqlDataAdapter(sql, myconn);
DataTable dt = new DataTable();
da.Fill(dt);
label1.Text = dt.Rows[0][0] + "";
string sq2 = "UPDATE domestic SET used = 1 WHERE numbers = '" + label1.Text + "'";
MySqlCommand cmd = new MySqlCommand(sq2, myconn);
myconn.Open();
cmd.ExecuteNonQuery();
myconn.Close();
}
Zobrazeno 13 zpráv z 13.