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


Zobrazeno 6 zpráv z 6.
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.


Ahoj,
já raději odladím SQL kód v manageru, třeba jako testovací uloženou proceduru, kterou bych si tam spouštěl. Určitě
by se ten kód zjednodušil a ve výsledku asi i zrychlil.
Nevím, jaké je zadání, ale řekl bych, že ten vnořený select má být přímo součástí prvního selectu, takže výsledkem by mohl být z pohledu C# jediný SQL-příkaz, třeba takto:
SELECT EndHdTicketId
FROM TicketRelation TR
JOIN tHdTicket T ON T.iHdTicketId = TR.EndHdTicketId
WHERE TR.TicketRelationTypeId = 2
AND T.dHdTicketResolved IS NULL
AND TR.BeginHdTicketId =
(
SELECT BeginHdTicketId
FROM TicketRelation TR
JOIN tHdTicket T ON T.iHdTicketId = TR.BeginHdTicketId
WHERE TR.TicketRelationTypeId = 2
AND T.dHdTicketResolved IS NULL
AND TR.EndHdTicketId = @iHdTicketId
);
A doporučuju zkusit ten SQL Manager 
Napsat SQL příkaz takhle natvrdo rovnou do inicializace commandu je docela drsné, ale když ti to vyhovuje...
Ale k problému:
Jinak jsem přesvědčený, že pokud nepotřebuješ parentTicketId k nějakým dalším věcem v kódu, tak by z těch dvou volání SQL šlo udělat jediné vracející rovnou cílový seznam.
Ahoj, nevím přesně kde má být chyba...
Znamená to, že ti první select nevrátí hodnotu, nebo že ti proběhne
druhý select špatně a nevloží se ti správně hodnota z prvního
selectu?
Nehlási ti náhodou překladač chybu na řádku
if (parentTicketId != null)
???
Máš tam totiž neinicializovanou proměnou typu int, která musí mít vždy hodnotu. Změň si deklaraci z
int parentTicketId;
na
int? parentTicketId = null;
nebo
int parentTicketId = 0;
// a pak testuj jestli je != 0 namísto null
Typ int (Int32) je totiž non nullable typ, tzn. že musí mít hodnotu. Typ int? - ten otazník je důležitý,obalí typ a přidá možnost mít null u non nullable typů... vnitřní struktura je pak trochu odlišná, přidá vlastnost HasValue (má/nemá hodnotu) a Value - Value je pak hodnota původního typu, v tomto případě int (při pokusu o přístup k hodnotě, která je null, vyhodí exception)
Dekuji vsem za rady. Jednotlive selecty mam otestovane a vraci, co maji. Jen mi to nejde spojit, tj. vysledek prvniho vlozit do podminky druheho. Urcite zitra vyzkousim upravit deklaraci promenne a priradit ji hodnotu 0. Pokud to nepomuze, zamyslim se nad spojenim obou selectu. Jinak to asi nepujde... Dam vam vedet, jak to dopadlo. A jeste jednou dekuji za ochotu.
Zobrazeno 6 zpráv z 6.