Alkalmazásfejlesztés II.: Dr. Dombi József Dániel

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 35

Alkalmazásfejlesztés II.

Dr. Dombi József Dániel

Szegedi Tudományegyetem
Informatikai Intézet
Szoftverfejlesztés Tanszék

2020

Alkalmazásfejlesztés II. 2020 .NET WinForms 1 / 35


Tartalom

1 .NET WinForms 2 .NET ADO.NET

Fordítás ideje: 2021.10.12 08:10:49 git branch: master 07bc972227fb9f9cbb02d664999c13b54cec0892

Alkalmazásfejlesztés II. 2020 .NET WinForms 2 / 35


Windows Forms

Az ablakozási alapegység a Form.


Visual Studioban ezek partial classok. A felületen lévő elemeket
kódját a Visual Studio generálja. Az üzleti logikát a másik partial
osztályba kell megvalósítani.
A felületi vezérlő elemek a Control osztályból származnak.
A koordináta rendszer a futtató eszköztől függ. X,Y koordinátákat
alkalmazunk és alapvetően pixel alapú. A bal felső sarok a kezdő
koordináta.
Két koordináta rendszert különböztetünk meg
Screen: Ablak pozíciója a felületen
Client: Formon, vagy controllon belül a pozíció

Alkalmazásfejlesztés II. 2020 .NET WinForms 3 / 35


Windows Forms események

Egy felhasználói ’akció’ lekezelése a kódban.


Eseményt kiválthat felhasználó, kód, rendszer.
Egy ’akció’ több eseményt is létrehozhat. (Click, MouseDown)
Az események bekövetkezésekor delegate-ek használunk, hogy
kezeljük az eseményt.
Minden egyes feliratkozó értesül az eseményről.
Egy adott függvénnyt több eseményhez is hozzá tudunk kötni.
Felíratkozás történhet fordítási és futási időben is.

Alkalmazásfejlesztés II. 2020 .NET WinForms 4 / 35


Windows Forms események
// Esem é ny kezel é s é re szolg á l ó f ü ggv é ny
// Á ltal á ban k é t param é tere van a f ü ggv é nynek
// Az els ő param é ter egy referencia , ahonnan az esem é ny kiv á lt ó dik .
// A m á sodik param é ter esem é ny f ü gg ő param é ter .
private void button1_Click ( o b j e c t sender , System . EventArgs e )
{

}
// fel í ratkoz á s esem é nyre
button1 . Click += new EventHandler ( button1_Click );

Alkalmazásfejlesztés II. 2020 .NET WinForms 5 / 35


Windows Forms megjelenítés

Form méretét a Size-al, vagy Width/ Height tulajdonságokkal tudjuk


módosítani
FormBorderStyle: meghatározhatjuk a Form viselkedését
átméretezésre vonatkozóan(pl: átméretezhető-e)
Controlloknál a Dock és Anchor speciális tulajdonságok. Előbbi az
ablak széléhez köti a controlt, míg az utóbbi a az ablak szélétől vett
távolságot tartja meg.

Alkalmazásfejlesztés II. 2020 .NET WinForms 6 / 35


Windows Forms adatkötés

Adatkötésnek nevezzük azt a folyamatot, amikor az adatot szeretnénk


a felületen megjeleníteni.
Két féle Binding-ot különböztetünk meg:
Simple: Egy értéket szeretnénk adatkötésben használni. (pl: táblázat
egy oszlopa) Ilyen lehet például a TextBox, vagy Label control, ahol az
értéket meg akarjuk jeleníteni.
Complex: Amikor több elemet akarunk egyszerre adatkötésben
használni. DataGridView, vagy ListBox-hoz szoktunk ekkor adatot
kötni.
A BindingSource control segít az egyszerű adatkötés
megvalósításában. A típus lehet adatbázis, külső szolgáltatás, vagy
objektum.

Alkalmazásfejlesztés II. 2020 .NET WinForms 7 / 35


Alkalmazásfejlesztés II.

Dr. Dombi József Dániel

Szegedi Tudományegyetem
Informatikai Intézet
Szoftverfejlesztés Tanszék

2020

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 8 / 35


Tartalom

1 .NET WinForms 2 .NET ADO.NET

Fordítás ideje: 2021.10.12 08:10:49 git branch: master 07bc972227fb9f9cbb02d664999c13b54cec0892

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 9 / 35


ADO.NET

Adatbázis műveletek támogatása.


Az ADO.NET osztályok egy halmaza
ADO utóda
online és offline környezet támogatása
fejlett XML támogatás
Releváns névterek
System.Data
System.Data.Common
System.Data.SqlClient
System.Data.OleDb
System.Data.Odbc
System.Xml
Adatforrás elérése Provider-eken keresztül lehetséges.

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 10 / 35


ADO.NET Adatforrás

Strukturálatlan
Strukturált, de nem hierarchikus
CSV, Excel fájlok
Exchange, Active Directory fájlok
Hierarchikus
XML dokumentumok
Relációs adatbázisok
MS Access, MS SQL Server
Oracle
OLEDB, ODBC

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 11 / 35


ADO.NET Online környezet

A kliens kapcsolata az adatforrással folyamatos


Előnye
könnyebb biztonságossá tenni
könnyebb a párhuzamosság kezelése
frissebb az adat
Hátránya
állandó hálózati kapcsolat
skálázhatóság: a szerver kapcsolatai végesek
user experience: nincs adat cache a kliens oldalon

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 12 / 35


ADO.NET Online működés
Az erőforrások a kapcsolat bontásáig foglaltak
Kapcsolat nyitása
Parancs futtatása
Eredmény feldolgozása (szekvenciális olvasó)
Olvasó bezárása
Parancs bezárása
Kapcsolat bezárása

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 13 / 35


ADO.NET Offline környezet

A kliens csak az adatok letöltésekor, frissítésekor kapcsolódik csak az


adatforráshoz
Előnye
adat letöltés után szabadon dolgozhatunk, nem kell kapcsolat
a kapcsolat újrafelhasználható mások által
skálázhatóbb megoldás
Hátránya
az adat nem mindig naprakész
frissítéskor nagyobb az esélye az ütközéseknek

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 14 / 35


ADO.NET Offline működés
Az erőforrások a feldolgozás alatt nem foglaltak
Kapcsolat nyitás
DataSet feltöltés
Kapcsolat bontás
DataSet feldolgozás
Kapcsolat nyitás
Adatforrás frissítése
Kapcsolat bontás

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 15 / 35


ADO.NET objektum modell alapok

Interfészek definiálják az ADO.NET alapjait képző tagokat (property,


metódus)
Minden osztály provider specifikusan prefixezett pl. SqlCeConnection
Többnyire implementálják az IDisposable interfészt
Javallott a using használata

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 16 / 35


ADO.NET objektum modell alapok

IDbConnection (DbConnection): ConnectionString, Open(), Close(),


CreateCommand(), BeginTransaction()
IDbCommand (DbCommand): CommandType, CommandText,
Connection, Parameters, Transaction ExecuteNonQuery(),
ExecuteReader(), ExecuteScalar(), Prepare()
IDataReader (DbDataReader): Close(), Read(), NextResult(),
GetSchemaTable() DbDataReader: FieldCount, indexer, GetType(),
GetName(), GetOrdinal()

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 17 / 35


ADO.NET objektum modell alapok

IDbDataAdapter (DbDataAdapter): Fill(), FillSchema(), Update()


IDbTransaction (DbTransaction): Connection, IsolationLevel,
Commit(), Rollback()

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 18 / 35


ADO.NET Providerek

Provider választása a forrásnak megfelelően


.Net Framework által szolgáltatottak: System.Data alnévterei
.SqlClient – MS SQL Server 7.0+
.SqlServerCe – MS SQL Server Compact Edition
.OracleClient – Oracle 8(?), 9i, 10g
.OleDb – MS Access, Excel, SQL Server 6.0-
.Odbc – csak ODBC meghajtóval rendelkező források

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 19 / 35


ADO.NET Connection String

Kapcsolatot leíró Connection String megszerzése (pl.: app.config)


A Connection String nem URL a Java-val ellentétben
Megadja a kapcsolódás paramétereit (szolgáltató,
felhasználónév/jelszó)

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 20 / 35


Connection string
// Adatb á zishoz kapcsol ó d á s
Data Source = Server1 \ MSSQL1 ; Initial Catalog = TestDB ;
User ID = username ; Password = aaaaaa

// Adatb á zis á llom á ny felcsatol á sa é s haszn á lata


Data Source =.\ SQLEXPRESS ; A t t a c h D b F i l en a m e = C :\ UserDB . mdf ;
Integrated Security = True ; Connect Timeout =30; User Instance = True

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 21 / 35


ADO.NET Kommunikáció

Kapcsolat nyitása az Open, zárása a Close metódussal történik


Az offline kapcsolatnál a DataAdapter önmaga nyit és zár

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 22 / 35


Kapcsolat nyitása
SqlConnection conn = new SqlConnection ();
conn . C o n n e c t i o n S t ri n g = ’ Data ␣ Source =... ’;
conn . Open ();
...
conn . Close ()

using ( SqlConnection conn = new SqlConnection ())


{
conn . C o n n e c t i o n S t ri n g = ’ Data ␣ Source =... ’;
conn . Open ();
}
// automatikus conn . Dispose () r é v é n conn . Close ()

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 23 / 35


ADO.NET Parancs

A parancs egy SQL kifejezést vagy tárolt eljárást reprezentál


Létrehozás: IDbConnection.CreateCommand(), new
XCommand(CommandText, XConnection, XTransaction)
Tulajdonságok
CommandType (Text, TableDirect, StoredProcedure)
CommandText
Parameters
Végrehajtás metódusai
int ExecuteNonQuery() – nem lekérdezés végrehajtása
object ExecuteScalar() – egy érték, első sor, első cella
IDataReader ExecuteReader() – eredményhalmaz

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 24 / 35


Parancs

SqlConnection conn = ...;


using ( SqlCommand command = conn . CreateCommand ())
{
command . CommandText = ’ SELECT ␣ * ␣ FROM ␣ Customers ’;

SqlDataReader reader = command . ExecuteReader ();


...
}

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 25 / 35


Parancs (tárolt eljárás)

SqlConnection conn = ...;


using ( SqlCommand command = conn . CreateCommand ())
{
command . CommandType = CommandType . S to r ed Pr oc e du re
command . CommandText = ’ getSalarySum ’;

i n t sum = ( i n t ) command . ExecuteScalar ();


}

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 26 / 35


ADO.NET DataReader
Lekérdezés eredményhalmazát teszi elérhetővé forward-only, read-only
módon
ExecuteReader() hívás eredménye
Önkényesen foglalja a kapcsolatot
Használata a Read() metódussal: a következő sorra lép, kezdetben az
első sor előtt van, ha a művelet sikeres, akkor true-val tér vissza
Tulajdonságok: Item indexer, FieldCount, HasRows
Metódusok: GetType() metódusok, Close(), IsDbNull() – értéktípusok
get metódusai exceptiont dobnak null esetén

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 27 / 35


Lekérdezés feldolgozása
SqlCommand command = ’ SELECT ␣ * ␣ FROM ␣ Bla ’;
using ( SqlDataReader reader = command . ExecuteReader ())
{
f o r ( i n t i = 0; i < reader . FieldCount ; i ++)
{
Console . Write ( ’ {0 ’} , reader . GetName ( i ));
}

w h i l e ( reader . Read ())


{
f o r ( i n t i = 0; i < reader . FieldCount ; i ++)
{
Console . Write ( ’ {0} ’ , reader . GetValue ( i ));
Console . Write ( ’ {0} ’ , reader [ i ]);
}
Console . WriteLine ();
}
}

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 28 / 35


ADO.NET Tranzakciók

új tranzakció létrehozása: IDbTransaction


IDbConnection.BeginTransaction(IsolationLevel)
Izolációs szintek: IsolationLevel enum, IDbTransaction.IsolationLevel
csak olvasható
véglegesítés és visszavonás: Commit() és Rollback() metódusok
Command végrehajtásakor expliciten be kell állítani a tranzakciót

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 29 / 35


Lekérdezés feldolgozása
SqlConnection conn = ...;

using ( SqlTra nsaction trans = conn . B e g i n T r a n s a c t i o n (


Isola tionLeve l . Repe atableRe ad ))
{
using ( SqlCommand command = conn . CreateCommand ())
{
command . Transaction = trans ; // meg kell adni !
command . CommandText = ’ INSERT ␣ INTO ␣ TABLE ␣ (1) ’;

i n t rows = command . e xe c ut eN on Q ue ry ();

i f ( rows == 0)
trans . Rollback ();
else
trans . Commit ();
} // trans . Dipose () r é v é n trans . Rollback ();
}

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 30 / 35


ADO.NET Offline mód
Ötlet
építsük fel az adatbázis egy részének mását
töltsük fel adatokkal és bontsuk a kapcsolatot
dolgozzunk a helyi adatokkal
nyissunk kapcsolatot és frissítsük az adatokat, majd zárás
Kisebb terhelés a szerver számára
Ütközések lehetnek frissítéskor, ha közben módosult az adat a
szerveren
Több adatforrás adata is összekapcsolható

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 31 / 35


ADO.NET Offline mód objektumai
DataSet
Tables – táblák halmaza
Relations – táblák közötti kapcsolatok (DataRelation)
DataTable
Rows – sorok (DataRow kollekció)
Columns – oszlopok (DataColumn kollekció)
Constraints – Unique- és ForeignKeyConstraint
ParentRelations és ChildRelations
DataView: a tábla egy nézete (DataViewRow)

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 32 / 35


Dataset töltés
SqlConnection conn = ...;
SqlCommand selectCommand =
new SqlCommand ( ’ SELECT ’ , conn );

SqlDa taAdapte r adapter = new Sql DataAdap ter ();


adapter . SelectCommand = selectCommand ;

DataSet ds = new DataSet ( ’ dsname ’ );


// nincs kapcsolat nyit á s á ltalunk
adapter . Fill ( ds );

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 33 / 35


DataSet módosítás
DataSet ds ;
DataTable table = ds . Tables [ ’ table ’ ];

// sor hozz á ad á s
DataRow row = table . NewRow ();
table . Rows . Add ( row );

// valid á ci ó é s esem é nyek felf ü ggeszt é se


row . BeginEdit ();
row [ ’ name ’] = ’B é la ’;
row [ ’ age ’] = 3;
// esem é nyek kiv á lt ó dnak
row . EndEdit ();
// vagy
row . CancelEdit ();

row . Delete ();


// vagy
table . Rows . Remove ( row );

Alkalmazásfejlesztés II. 2020 .NET ADO.NET 34 / 35


Köszönöm a figyelmet!

Alkalmazásfejlesztés II. 2020 35 / 35

You might also like