Získaní ID před automatickým vytvořením – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Získaní ID před automatickým vytvořením – .NET – Fórum – Programujte.comZískaní ID před automatickým vytvořením – .NET – Fórum – Programujte.com

 

1. 8. 2015   #1
-
0
-

Mám formulář(FormView) v ASP.NET WebForms. Po stisknutí tlačítka vložit, se vytvoří záznam do DB s automatickým ID + 1. 

Je nějaká možnost vypsat ID, které bude přidělené záznamu, který ještě nebyl vytvořen?

Předem moc děkuji za rady.

Nahlásit jako SPAM
IP: 89.177.56.–
Kit+15
Guru
1. 8. 2015   #2
-
0
-

#1 TomasZelenka
Už z principu to nejde.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ondrej39+1
Věrný člen
1. 8. 2015   #3
-
0
-

#2 Kit
Nesmysl.

#1 TomasZelenka
Samozřejmě to jde, budeš potřebovat ještě jeden dotaz do databáze navíc. Seřaď si tabulku podle ID jako DESC, vypiš si pouze IP prvního prvku, toto ID si ulož do proměnné, přičti k němu jedničku.

Záleží na tom, kde chceš mít nfo zobrazeno, do daného infa ho samozřejmě musíš načíst z té databáze.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Kit+15
Guru
2. 8. 2015   #4
-
0
-

#3 ondrej39
Hmm. A co když požádají dva klienti současně? Kolize jak vyšitá.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
2. 8. 2015   #5
-
0
-

#3 ondrej39
V případě, že některé předchozí záznamy již byly záznamy, tak se ID bude rozcházet.

Nahlásit jako SPAM
IP: 89.177.56.–
KIIV
~ Moderátor
+43
God of flame
2. 8. 2015   #6
-
0
-

Moc nechapu, proc ti nestaci funkcionalita jako last insert id, LASTVAL a podobne. Kazda slusna databaze ti muze nabidnout id naposledy vlozeneho radku (jako hned po insertu) - jen je to prakticky v kazde databazi ziskavano jinal.

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
P
~ Anonymní uživatel
212 příspěvků
3. 8. 2015   #7
-
0
-

#5 TomasZelenka
Z toho plyne, ze Kit ma pravdu. Dokonce vsechny predchozi zaznamy jsou zaznamy, ne jen nektere :-)

Vazne - muzes ziskat bud nejvyssi existujici ID, nebo hodnotu aktualne prideleneho ID po INSERTu, coz je asi to, o co ti jde.

Nahlásit jako SPAM
IP: 85.93.116.–
LukoSS
~ Anonymní uživatel
73 příspěvků
3. 8. 2015   #8
-
0
-

Pokud by bylo opravdu potřeba vědět ID již při příchodu na stránku, tak to je také možné řešit třeba takto:

  1. Po příchodu na stránku vytvořit prázdný záznam v databázi, ideálně s nějakým příznakem, podle kterého bude možné poznat, že tento záznam je pouze rozpracovaný.
  2. Po stisknutí tlačítka pro vložení provést pouze update připraveného záznamu.

Vhodnost tohoto řešení ale záleží na konkrétní situaci. Jelikož se může stát, že uživatel přijde na stránku a pak z ní hned zase odejde, tak by bylo potřeba po nějaké době mazat takovéto "neplnohodnotné" záznamy, aby se nehromadili v databázi.

Nahlásit jako SPAM
IP: 88.103.252.–
Kit+15
Guru
3. 8. 2015   #9
-
0
-

#5 TomasZelenka
Jedna možnost (trochu kostrbatá, ale bezpečná) přece jen existuje. Otevřeš transakci, zapíšeš data. Tím se vygeneruje ID, které si můžeš zjistit. Potom stačí tu transkakci potvrdit (commit) nebo zahodit (rollback).

Otázkou však je, k čemu je tahleta šaráda dobrá a komu tím prospěješ.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
3. 8. 2015   #10
-
0
-

#8 LukoSS
Nebylo by jednodušší použít session?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
LukoSS
~ Anonymní uživatel
73 příspěvků
3. 8. 2015   #11
-
0
-

#10 Kit
Na to mazání visejících záznamů v databázi? Na to by session asi stačil, to je fakt.

Pokud jde o to tvé řešení s transakcí - to není moc dobrý nápad, protože by bylo potřeba udržovat otevřené připojení do DB do doby, než uživatel záznam vloží/odejde ze stránky. A kvůli tomu by zase bylo potřeba prodloužit timeout, aby se to připojení po chvíli neuzavřelo. Faktem ale je, že si nedokážu představit situaci, ve které by mělo smysl znát dopředu ID záznamu, který se teprve bude vytvářet, takže bych to asi více neřešil   

Nahlásit jako SPAM
IP: 88.103.252.–
Kit+15
Guru
3. 8. 2015   #12
-
0
-

#11 LukoSS
Transakce by rozhodně neměly čekat na reakci uživatele. Ani to není v zadání.

Měl jsem na mysli session místo databáze.

Nikde není stanoveno, jak má vypadat následující ID v databázi. Dokonce to ani nemusí být vyšší číslo. Je jen jediný požadavek na ID: Aby bylo unikátní.

Vždy se nejprve zapíše záznam, ke kterému databáze přidělí ID, se kterým se následně dá pracovat. Pokud to nekdo potřebuje dělat jinak, nejspíš má chybu v návrhu databáze a tedy i aplikace.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
3. 8. 2015   #13
-
0
-

Děkuji všem za rady.

Chtěl jsem, aby při vytváření záznamu se nahrávaly obrázky... od uživatele do složky, která bude pojmenovaná podle ID záznamu.

Nahlásit jako SPAM
IP: 89.177.56.–
3. 8. 2015   #14
-
0
-

#5 TomasZelenka
Oprava: V případě, že některé předchozí záznamy již bylysmazány, tak se ID bude rozcházet.

:)

Nahlásit jako SPAM
IP: 89.177.56.–
KIIV
~ Moderátor
+43
God of flame
3. 8. 2015   #15
-
0
-

#13 TomasZelenka
tak na to ti uplne presne staci zjistit ID naposledy vlozeneho zaznamu a podle toho pokracovat dal...

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
3. 8. 2015   #16
-
0
-

#13 TomasZelenka
Tak to je jednoduché: Vloží se záznam o uživateli do DB, při té příležitosti se zjistí ID záznamu, vytvoří se adresář s názvem ID a do něj se vloží obrázky. Nemusíš spekulovat o budoucím ID, stačí použít aktuální.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
5. 8. 2015   #17
-
0
-

poznat buduce id je zbytocne pretoze aj tak nedokazes vytvorit zaznam ktory obsahuje foreign key na iny zaznam ktory este neexistuje ... 

generovanie id sa da nastavit rozne a ak sa nastavi ze preskakuje 10 zaznamov tak pripocitavat jednotku by nemalo zmysel ... navyse niektore databazy si zaberaju niekolko id dopredu a teda ak sa k zapisu dostane iny thread potom to poradie nebude sediet ...

Nahlásit jako SPAM
IP: 84.245.121.–
https://github.com/Flowy
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

Problem s vytvorenim tabulky — založil ivanhoeblack

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý