C# - Kötegelt SQL lekérdezések futtatása és megjelenítése

forráskód letöltése
SQL lekérdezések futtatásánál lehetőségünk van arra is, hogy ne csak egyesével tehessük ezt meg, hanem egymás után tetszőleges számú lekérdezést, vagy egyéb SQL utasítást futtassunk. Ekkor a visszakapott eredmény halmazokat egymás után ki is olvashatjuk és megjeleníthetjük, felhasználhatjuk tetszés szerint.
Kihasználva ezt a lehetőséget a mellékelt példában olyan lekérdezést valósítunk meg, mely három különböző SQL select-et futtat egymás után, majd meg is jeleníti ezek eredményét.
A lekérdezéseket az MS SQL Northwind példaadatbázisában futtatjuk, melyek az alábbiak lesznek:
select productname from products
select companyname from customers
select firstname+' '+lastname from employees
A lekérdezés eredményeit úgy jelenítjük meg, hogy nyitunk egy új példányt a Form2-ből, melyen egy ListBox-ba elhelyezzük az eredmény halmaz sorait. Ehhez a Form2-ben szükségünk lesz a függvényre, mely képes a ListBox soraihoz egy újat hozzáadni.
    public void Add(string name)
    {
      listBox1.Items.Add(name);
    }
Térjünk vissza most a Form1-hez, nézzük miként is megy a lekérdezés. Létrehozunk először egy kapcsolatot az SQL szerverrel.
    private void button1_Click(object sender, System.EventArgs e)
    {
      SqlConnection connection = new SqlConnection("data source=localhost;initial catalog=northwind;user id="+textBox1.Text+";password="+textBox2.Text+";connect timeout=5");
      connection.Open();
Ha a kapcsolat adott, akkor egy SqlCommand osztály segítségével létrehozzuk a kötegelt lekérdezést, melyben három select utasítás kap helyet. Ezeket egy-egy pontosvesszővel kell elválasztanunk egymástól.
      SqlCommand c = new SqlCommand("select productname from products; select companyname from customers; select firstname+' '+lastname from employees", connection);
A lekérdezéseket futtathatjuk az ExecuteReader függvénnyel, mely egy SqlDataReader osztály példányát adja vissza. Ennek segítségével kiolvashatjuk egymás után a három lekérdezésünk eredményeinek minden sorát.
      SqlDataReader dr = c.ExecuteReader();
      int left=0;
Szükségünk lesz egy do - while ciklusra, mely az egyes lekérdezések eredményei között fog lépkedni.
      do
      {
        Form2 f2 = new Form2();
Szükségünk lesz egy while ciklusra, mely az adott lekérdezés eredményének sorain megy végig. Ezeket a sorokat a létrehozott Form2 ListBox-ába tároljuk el, majd pozícionáljuk a Form2 példányát úgy, hogy azok egymás mellé kerüljenek.
        while (dr.Read())
        {
          f2.Add(dr.GetString(0));
        }
        f2.Left = left;
        f2.Top = this.Height;
        left+=f2.Width;
        f2.Show();
      } 
Végül léphetünk a következő lekérdezés eredményhalmazára, melyhez az SqlDataReader osztály NextResult függvényét kell meghívnunk.
      while (dr.NextResult());        
    }
E kettős ciklus futásának végére rendelkezésünkre áll mindegyik lekérdezés eredményének mindegyik sora.