Skip to content

Дисконектовано окружење и DataSet

Дисконектовано окружење

Коришћење Connection, Command и DataReader објеката подразумева да је веза ка бази података отворена за све време трајања обраде података. Поред оваквог начина приступа подацима постоји и другачији механизам, тзв. бесконекциони приступ бази података, односно приступ бази података у дисконектованом окружењу.

Коришћење безконекционог начина приступа подацима засновано је на креирању локалне копије података који се чувају у оперативној меморији клијентског рачунара. Коришћењем типова објеката из именског простора System.Data могуће је креирати локални модел података који ће поред самих података из базе поседовати везе између табела, ограничења примењена на колоне, примарне кључеве, погледе и све друге карактеристике модела података коришћеног за креирање базе података. Локални модел података дозвољава корисницима креирање и извршавање упита над локалним подацима, њихово филтрирање, сортирање и снимање у базу података.

За прибављање и ажурирање података се у овом случају користи DataAdapter који представља инстанцу DataAdapter класе. DataAdapter објекат користи DataSet објекат за пренос података од базе података и ка бази података. Сваки DataSet објекат може бити састављен од већег броја DataTable (табела података) објеката који поседују колекције DataRow (ред табеле) и DataColumn (колона табеле) објеката.

DataSet објекат

DataSet објекат је један од најважнијих објеката у ADO.NET дисконектованом окружењу.

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset?view=netframework-4.0

За демонстрацију рада са DataSet објектом користићемо једноставну Windows Forms апликацију са DataGridView контролом и податке из Northwind базе података. Креирајте апликацију као на слици:

Декларишите SqlDataAdapter, DataSet и конекциони стринг и унесите код за догађај Form1_Load који ће попунити dataGridView1 контролу са подацима из табеле Employees:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace RadSaDataSetom
{
    public partial class Form1 : Form
    {
        SqlDataAdapter da;
        DataSet ds;
        string con = "Data Source=MAINFRAME\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True";

        public Form1()
        {
            InitializeComponent();
        }
        
        private void Form1_Load(object sender, EventArgs e)
        {
            da = new SqlDataAdapter("Select * from Employees", con);
            ds = new DataSet();
            da.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        }
    }
}

Када покренете апликацију, dataGridView1 треба да буде попуњена:

Када смо направили “костур” ове апликације, проћиемо кроз често коришћене методе класе DataSet, које ће се извршавати кликом на дугме.

Метода AcceptChanges()

Ова метода чува промене које су направљене у DataSet-у од времена када је креиран, односно, од времена када је метода последњи пут позвана.

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset.acceptchanges?view=netframework-4.0

Поставите дугме на форму са текстом “Prihvati promene” и унесите код за догађај button1_Click:

        private void button1_Click(object sender, EventArgs e)
        {
            ds.AcceptChanges();
        }

Унесите нови слог у базу или измените неки постојећи. Можете уочити да се кликом на дугме чувају промене које сте направили у DataSet-у кроз кориснички интерфејс апликације (промене су сачуване само у DataSet-у, а не и у бази података!!!).

Метода Clear()

Ова метода брише све слогове из DataSet-а.

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset.clear?view=netframework-4.0

Поставите дугме на форму са текстом “Obriši sve” и унесите код за догађај button2_Click:

        private void button2_Click(object sender, EventArgs e)
        {
            ds.Clear();
        }

Можете уочити да се кликом на дугме бришу сви слогови из DataSet-а (а не из из базе података).

Метода Clone()

Ова метода копира структуру DataSet-а (DataTable шеме, везе и ограничења) али не и саме податке.

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset.clone?view=netframework-4.0

Поставите на форму још једну DataGridView контролу, дугме са текстом “Kloniraj” и унесите код за догађај button3_Click:

        private void button3_Click(object sender, EventArgs e)
        {
            DataSet ds2 = ds.Clone();
            dataGridView2.DataSource = ds2.Tables[0];
        }

Можете уочити да се, кликом на дугме, у другој DataGridView контроли копирала структура табеле из прве DataGridView контроле, односно табела без података.

Метода Copy()

Ова метода копира комплетну структуру и податке DataSet-а.

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset.copy?view=netframework-4.0

Поставите на форму дугме са текстом “Kopiraj” и унесите код за догађај button4_Click:

        private void button4_Click(object sender, EventArgs e)
        {
            DataSet ds2 = ds.Copy();
            dataGridView2.DataSource = ds2.Tables[0];
        }

Можете уочити да се, кликом на дугме, у другој DataGridView контроли копирала и структура табеле и подаци из прве DataGridView контроле.

Метода GetChanges()

Ова метода копира промене које су направљене у DataSet-у од времена када је креиран, односно, од времена када је последњи пут позвана метода AcceptChanges().

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset.getchanges?view=netframework-4.0

Поставите на форму дугме са текстом “Prikaži promene” и унесите код за догађај button5_Click:

        private void button5_Click(object sender, EventArgs e)
        {
            DataSet ds2 = ds.GetChanges();
            dataGridView2.DataSource = ds2.Tables[0];
        }

Можете уочити да се, кликом на дугме, у другој DataGridView контроли приказују само промене у односу на прву DataGridView контролу, односно слогови који су измењени или додати.

Метода HasChanges()

Ова метода враћа boolean вредност која индицира да ли су се десиле промене у DataSet-у од времена када је креиран, односно, од времена када је последњи пут позвана метода AcceptChanges().

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset.haschanges?view=netframework-4.0

Поставите на форму дугме са текстом “Ima li promena?” и унесите код за догађај button6_Click:

        private void button6_Click(object sender, EventArgs e)
        {
            if (ds.HasChanges())
                MessageBox.Show("Ima promena!");
            else
                MessageBox.Show("Nema promena!");
        }

Можете уочити да се, кликом на дугме, уколико у DataSet-у има промена, приказује порука “Ima promena!”, односно, уколико их нема, приказује порука “Nema promena!”.

Метода RejectChanges()

Ова метода одбацује све промене у DataSet-у од времена када је креиран, односно, од времена када је последњи пут позвана метода AcceptChanges().

https://docs.microsoft.com/en-us/dotnet/api/system.data.dataset.rejectchanges?view=netframework-4.0

Поставите на форму дугме са текстом “Odbaci promene” и унесите код за догађај button7_Click:

        private void button7_Click(object sender, EventArgs e)
        {
            ds.RejectChanges();
        }

Можете уочити да се, кликом на дугме DataSet враћа у пређашње стање, уколико je у њему било промена.