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.
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.
#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.
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.
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:
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.
#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š.
#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
#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.
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.
#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í.
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 ...
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku