C# - Insert, Update, Delete SQL utasítások automatikus generálása

forráskód letöltése
Képzeljük el, hogy adott egy tábla, melynek 30 oszlopa van. Ha ehhez szeretnénk egy SqlCommand osztályt készíteni, melyben megvalósítunk egy Insert, vagy Update utasítást, akkor bizony elég sok forráskódot kell gépelnünk mire minden oszlophoz kerül egy-egy paraméter a megfelelő típussal és névvel.
A .NET Framework osztályai arra is lehetőséget biztosítanak, hogy egy táblához automatikusan készüljön el a megfelelő SqlCommand osztály a fenti parancsok végrehajtásához, sok programozói munkától mentesítve a fejlesztőt.
Mellékelt példa futtatása előtt a Form1.cs forráskód 137. sorában lévő connStr változó értékét módosítsa úgy, hogy a leírt sztring megfeleljen ahhoz, hogy az MS SQL szerver Northwind példaadatbázisa elérhető legyen.
A szükséges parancsok generálásához csak annyi a teendőnk, mint az SqlCommandBuilder osztály lehetőségeit felhasználjuk.
Nézzük miként is történik mindez. Első lépés, hogy kapcsolatot hozzunk létre a MS SQL szerverrel. Ehhez az SqlConnection osztályt használjuk. Szükségünk lesz egy SqlDataAdapter osztályra is, melyben megadunk egy egyszerű select utasítást. Erre leginkább azért van most szükségünk, hogy az SqlCommandBuilder osztály képes legyen megállapítani azt, hogy melyik táblát is szeretnénk használni az Insert, Update, Delete utasításokhoz.
    private void button1_Click(object sender, System.EventArgs e)
    {
      SqlConnection connection = new SqlConnection(connStr);
      SqlDataAdapter da = new SqlDataAdapter("select * from Orders", connection);      
Létrehozunk egy SqlCommandBuilder osztályt, melynek konstruktorában a DataAdapter osztályunk példányát kell megadnunk. Ezek után már hívhatjuk is a GetInsertCommand, GetUpdateCommand, GetDeleteCommand nevű függvényeket, melyek egy-egy SqlCommand osztályt adnak eredményül, amiben megtalálható a szükséges SQL utasítás a megfelelő paraméterekkel együtt.
      SqlCommandBuilder cb = new SqlCommandBuilder(da);    
      SqlCommand c = cb.GetInsertCommand();
      ...
    }
Nem árt, ha ismerjük még a RefreshSchema függvény nyújtotta lehetőséget is. Ennek hívására akkor lehet szükségünk, ha megváltoztatjuk a select utasításunkban foglaltakat. Ekkor szükséges, hogy a SqlCommandBuilder osztály frissítse ismereteit azokról a táblákról, melyekhez majd SQL utasításokat kell generálnia.