Класе за рад са базама података

Говорили смо о два именована простора који имају исти сет класа. Разликују се у префиксу назива. На пример имамо SqlConnection (System.Data.SqlClient) и OleDbConnection (System.Data.OleDb именовани простор). Ово имајте у виду јер у наредном тексту радимо са OleDb објектима због Access базе података.

Да би могли да радимо са базама података у програмском језику C# неопходно је разумети теоретске основе везане за ADO .NET.

ADO.NET data provider-и

ADO.NET поседује више скупова типова објеката који комуницирају са DBMS-ом. Ове скупове типова објеката називамо data provider-има. Сваки од data provider-a оптимизован је за интеракцију са конкретним DBMS-ом. Предност оваквог приступа је могућност појединачних data provider-a да имају могућност манипулације објектима који су специфични за посматрани DBMS. Још једна од предности је начин комуникације између data provider-a и DBMS-a. Наиме, с обзиром да је сваки data provider оптимизован за рад са конкретним DBMS-ом, он комуницира директно са DBMS-ом тј. не постоји међуслој који би прилагодио захтеве корисника конкретном DBMS-у.

Data provider је најлакше посматрати као скуп типова објеката дефинисаних у одређеном простору имена (namespace) који имају могућност директне комуникације са конкретним DBMS-ом. Сваки од data provider-a поседује скуп класа које омогућавају извршење основних функционалности. Све класе конкретних data provider-а имају заједничке родитељске класе тј. изведене су из истог скупа класа и интерфејса, које се налазе у System.Data.Common простору имена односно у System.Data простору имена. Основни објекти ADO.NET Data Provider типа објекта приказани су у следећој табели:

Објекат

Родитељска класа

Имплементира интерфејс

Значење

Connection

DbConnection

IDbConnection

Омогућава отварање и затварање конекције ка бази података

Command

DbCommand

IDbCommand

Представља SQL упит или ускладиштену процедуру. Омогућава приступ DataReader објекту конкретног data provider-a

DataReader

DbDataReader

IDataReader, IDataRecord

Омогућава читање података коришћењем курсора на серверској страни

DataAdapter

DbDataAdapter

IDataAdapter, IDbDataAdapter

Преноси DataSet објекте између клијента и извора података. Поседује конекцију и скуп од четири основне операције за селектовање, додавање, измену и брисање података у извору података

Parameter

DbParameter

IDataParameter, IDbDataParameter

Представља именовани параметар у параметризованом упиту

Transaction

DbTransaction

IDbTransaction

Енкапсулира трансакцију базе података

Иако ће се имена конкретних објеката сваког од конкретних Data Provider објеката разликовати (нпр. SqlConnection, OracleConnection, OdbcConnection или MySqlConnection), сви су изведени из исте класе и имплементирају исте интерфејсе па је након савладавања коришћења једног од data provider-a релативно једноставно користити све остале. Структура data provider-a .NET платформе приказана је на слици.

dataprovider

Microsoft .NET платформа поседује низ уграђених data provider-a за различите DBMS-ове. Списак уграђених data provider-a приказан је у следећој табели:

Data Provider

Простор имена (namespace)

Библиотека

OLE DB

System.Data.OleDb

System.Data.dll

Microsoft SQL Server

System.Data.SqlClient

System.Data.dll

Microsoft SQL Server Mobile

System.Data.SqlServerCe

System.Data.SqlServerCe.dll

ODBC

System.Data.Odbc

System.Data.dll

Oracle

System.Data.OracleClient

System.Data.OracleClient.dll

Поред data provider-a који су уграђени у .NET платформу, могуће је користити data provider-e које обезбеђују појединачни произвођачи бесплатних или комерцијалних DBMS-ова попут SQLite, DB2, MySQL, PostgreSQL или Sybase.

Поред представљених простора имена, .NET платформа поседује скуп додатних простора имена који својим функционалностима припадају скупу ADO.NET простора имена. Неки од ових простора имена приказани су у следећој табели:

Простор имена (namespace)

Значење

System.Data

Дефинише основне ADO.NET типове које користе сви data provider-и

System.Data.Common

Садржи типове које деле сви ADO.NET data provider-и

System.Data.Sql

Садржи типове који омогућавају откривање инстанци MS SQL Server-a у локалној мрежи

System.Data.SqlTypes

Садржи типове података које користи Microsoft SQL Server

Од свих ADO.NET простора имена (namespace-a), System.Data је најопштији. Свака апликација која жели да приступа подацима коришћењем ADO.NET-a мора користити класе дефинисане овим простором имена. System.Data садржи класе које су заједничке за све data provider-e. У следећој табели приказани су основни чланови System.Data простора имена.

Класа

Значење

Constraint

Представља ограничење примењено на DataColumn објекат

DataColumn

Представља једну колону DataTable објекта

DataRelation

Представља родитељ/дете однос између два DataTable објекта

DataRow

Представља један ред у DataTable објекту

DataSet

Представља локалну копију података у меморији клијентског рачунара који се састоји од низа повезаних DataTable објеката

DataTable

Представља локалну копију табеле базе података

DataTableReader

Омогућава читање података из DataTable објекта ред по ред

DataView

Представља поглед на табелу базе података и коирсти се за сортирање, филтрирање, претраживање и измену података

Конекција

У сваком случају, без обзира шта радили са базом података, неопходно је прво направити везу – конекцију (Connection) ка њој. Ову функционалност нам даје класа OleDbConnection. Основно својство ове класе које и одређује параметре конекције је својство ConnectionString. Као што се из имена да претпоставити својство је типа string. Потребно је подесити string тако да се састоји од парова:

naziv parametra1=vrednost parametra1; naziv parametra2=vrednost parametra2;...

и тако редом. Очигледно, сепаратор је знак ;

Параметри и њихово значење је следеће:

Provider – означава име потребног драјвера базе података како је регистрован у систему. За Access базу име драјвера је увек Microsoft.Jet.OLEDB.4.0

Када ово склопимо добијамо:

"Provider= Microsoft.Jet.OLEDB.4.0;"

Data Source – када је Access база у питању, овај параметар означава путању и име датотеке која представља базу. Ако се база налази на путањи C:\baza\Nwind.mdb, ConnectionString изгледа овако:

"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\baza\Nwind.mdb"

У основној варијанти ово је довољно. Међутим, ако је база заштићена корисничким именом и шифром, неопходно је и то навести. На пример корисник наше базе је Admin са шифром 123 (у пракси избегавајте овако „јаке“ шифре). Да би ово постигли користимо још два параметра: User id и Password

Финална верзија стринга конекције би могла да изгледа овако:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\baza\Nwind.mdb;User id=Admin;Password=123"

Ми ћемо користити аутоматски генерисан ConnectionString који смо добили приликом повезивања базе података са нашим C# пројектом.

Када смо поставили ConnectionString својство потребно је експлицитно отворити конекцију ка бази. За ово се користи једноставна метода Open() без аргумената. У случају да је база из неког разлога недоступна, оштећена или постоји проблем у мрежи, метода Open() ће генерисати грешку у време извршавања.

Када завршимо посао, потребно је затворити конекцију са базом. Ово технички није неопходно, али обавезно то урадите како би сачували ресурсе (број истовремених конекција) – база, мрежа и на крају корисници ваше апликације ће вам бити захвални ако поштујете ово правило.

Команда

Објекат помоћу којег задајемо SQL упит бази података је OleDbCommand. Команда се увек извршава преко већ дефинисане конекције. Може представљати различите ствари које су изван опсега овог серијала. Ми ћемо се ограничити на једноставно слање основних SQL упита и приказа резултата извршавања.

Својства команде и њихово значење су следеће:

Својство Connection дефинише по којој конекцији ће команда бити извршена. Својство је објектног типа и то OleDbConnection.
Својство CommandText је string типа и помоћу њега постављамо потребни упит.

У случају да желимо да извршимо SQL SELECT упит који смо обрадили у предходном наставку, неопходна су нам још два објекта.

DataSet

DataSet представља меморијски простор у коме се чува резултат SELECT упита. Можемо га третирати као матрицу која се састоји од редова и колона. Тачније речено, DataSet може бити и низ матрица јер кроз једну команду можемо послати више SELECT упита. Тада сваки SELECT прави своју матрицу која је у овом контексту представљена објектом Table.

Обратите пажњу да DataSet нема префикс Sql нити OleDb.

DataSet се користи као универзални складишни простор који чак не мора бити ни на који начин повезан са базама података. Поседује пуно својстава и метода, али о њима касније.

OleDbDataAdapter

Овај објекат представља спону између команде и објекта DataSet. OleDbDataAdapter је задужен за покретање команде, прослеђивање SELECT упита преко конекције и на крају попуњавање DataSet објекта подацима који су резултат SELECT упита. Својство које дефинише команду коју треба извршити је SelectCommand. Ово својство је типа OleDbCommand.

Метода која попуњава DataSet подацима се зове Fill, а њен улазни аргумент је објекат типа DataSet.

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

Читаоцу који се први пут сусреће са овим објектима све вероватно изгледа (пре)компликовано на први поглед. Међутим креатори ове технологије су имали у виду могућности рада са практично свим постојећим форматима база података који су тренутно на тржишту или више нису, али су од значаја.

One thought on “Класе за рад са базама података

  1. Повратни пинг: C# апликација за рад са SQL упитима – Рачунари и програмирање

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се /  Промени )

Google photo

Коментаришет користећи свој Google налог. Одјавите се /  Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се /  Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се /  Промени )

Повезивање са %s