C# - Aktuális Identity érték lekérdezése

forráskód letöltése
Amikor egy-egy új sort helyezünk el egy adattáblába, melynél van olyan oszlop, aminek értékét a belső identity változó adja, akkor sok esetben programból is szükségünk van e változó aktuális értékére. Ennek kiolvasásához mi sem lenne egyszerűbb megoldás, mintha az aktuális értéket rögtön visszaadná az a tárolt eljárás, mellyel az új sort felvettük a táblába.
Mellékelt példában készítünk egy ilyen megoldást.
A mellékelt példa futtatása előtt a Form1.cs 34. sorában javítsa a connStr változót annak érdekében, hogy a Northwind példaadatbázis elérhető legyen.
A példa futtatása előtt további előkészítő lépésként hozzon létre egy új tárolt eljárást a Northwind adatbázisba az alábbi tartalommal, melyet a mellékelt InsertCategory.sql állomány is tartalmaz.
CREATE PROCEDURE InsertCategory AS
set nocount on 
INSERT INTO Categories
                 (CategoryName)
VALUES     (N'Software Online')
select InsertCategory=@@identity 
set nocount off
GO
Amint az látható is a tárolt eljárásban az új sor beszúrása után a tárolt eljárás visszatérési értékének az identity változó aktuális értékét adjuk. A helyes működés érdekében a nocount kapcsolót beállítjuk, hogy ne történjen meg az INSERT INTO beszúrása által érintett sorok számlálása.
Ettől kezdve a felhasználás már egyszerű. Egy létező SQL kapcsolat mellett egy SqlCommand osztály segítségével futtatjuk a tárolt eljárást majd kiolvassuk annak visszatérési értékét, mely most már az identity aktuális értéke lesz.
    private void button2_Click(object sender, System.EventArgs e)
    {
      SqlCommand c = new SqlCommand("InsertCategory", connection);
      label1.Text = c.ExecuteScalar().ToString();
A tárolt eljárás futtatása után meghívjuk a SetData függvényt, mely frissíti a Form-on lévő DataGrid tartalmát.
      SetData();
    }
A SetData függvényben egy SqlDataAdapter osztály felhasználásával futtatunk egy egyszerű select lekérdezést, majd az eredményt hozzákötjük a DataGrid-hez.
    private void SetData()
    {
      SqlDataAdapter da = new SqlDataAdapter("select * from Categories", connection);
      DataSet ds = new DataSet();
      da.Fill(ds);
      dataGrid1.DataSource = ds.Tables[0].DefaultView;
    }