Často v ASP.NET aplikacích máme nějakou stránku, na které se v databázi zakládají nové záznamy. V databázi záznamy identifikujeme většinou pomocí čísla nebo pomocí guidu a někdy potřebujeme ID právě přidaného záznamu získat, abychom podle toho mohli udělat další akci.
Máme např. stránku Objednavka.aspx, která umožňuje vkládat nové záznamy. Po jeho vložení se chceme třeba přesměrovat ObjednavkaDetail.aspx?id=32, kde 32 je ID objednávky. Jak na to?
1. InsertCommand komponenty SqlDataSource upravte takto, pokud používáte pole typu INT s nastavením IDENTITY(1,1), což je automatická inkrementace.
INSERT INTO [Objednavky] ([Zakaznik], ...) VALUES (@Zakaznik, ...); SELECT @NewId = @@IDENTITY
Pokud používáte GUID, udělejte to nějak takto:
SET @NewId = NEWID(); INSERT INTO [Objednavky] ([Id], [Zakaznik], ...) VALUES (@NewId, @Zakaznik, ...)
2. Do elementu InsertParameters přidejte nový parametr a nastavte mu směr na InputOutput. Pokud používáte INT, bude to vypadat takto:
<asp:Parameter Name="NewId" Type="Int32" Direction="InputOutput" />
Pokud GUID, pak takto:
<asp:Parameter Name="NewId" Size="100" Direction="InputOutput" />
3. V události SqlDataSource_Inserted najdete ID v:
e.Command.Parameters("@NewId").Value
e.Command.Parameters["@NewId"].Value
A to je celé. Pochopitelně by bylo lepší, pokud si na to uděláte v databázi proceduru, tyhle dotazy jsou již trochu komplikovanější.