C# .NET - spajanje na bazu podataka

poruka: 7
|
čitano: 7.502
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
protjeran
offline
C# .NET - spajanje na bazu podataka

Da li je itko voljan da opiše tj. sastavi nekakav tutorijal o tome kako se .NET komponentama spaja na baze podataka (npr. Access) i kako se njima rješavaju neki uobičajeni problemi poput data concurrency i sl.. Malo sam pogledao primjere i svakako me zadivilo da već prema inicijalnim postavkama koriste konekcije u vrijeme zahtjeva. Naravno, to je tek kap u moru mogućnosti pri programiranju s bazama pa me zanima što još je u njih implementirano, kako se radi s zapisima (dohvaćanje, spremanje..) itd itd..

 

Znači, zanima me kako cijelu ovu priču riješiti komponentama poput DataSet, BindingSource, DataGrid itd.. I ako može praktični dio (code) u C#-u.

 

Hvala

Poruka je uređivana zadnji put pet 23.1.2009 15:16 (Tracer).
Moj PC  
0 0 hvala 0
17 godina
offline
C# .NET - spajanje na bazu podataka

Imas na netu tonu step by step tutoriala.

Evo par:

http://www.asp.net/learn/data-videos/

http://blog.stevex.net/index.php/data-access-using-tableadapter/

http://www.functionx.com/adonet/index.htm

 

uglavnom, najjednostavnije je koristiti DataSetove (Add new Item -> DataSet), jer dobis strongly-typed klase. Kreiras novi DataSet fajl, dodas TableAdapter s kojim definiras query na bazu, i ovaj ti kreira DataTable prema podacima koji se dobe iz tog query.

Taj TableAdapter pozoves iz koda, i napunis DataSet i DataTable pozivom nekog od kreiranih querya iz TAdaptera.

Sve se to mozes i rucno u kodu, ali moras pisati SQL i nemas intellisense nad podacima koje dobijes.

Najtezi (puno koda, i forward-only citanje) nacin ali sa najboljim perfomansama je citanje baze preko Readera.

 

 

 

 

"A developer is a machine that converts coffee into code"
Moj PC  
0 0 hvala 0
17 godina
protjeran
offline
RE: C# .NET - spajanje na bazu podataka

Šteta što se mora pisati baš sql. U C++u su to sve "omotali" funkcijama, pa kada npr. napišeš

 

Table1->Locate("ID", 111);

 

on to sam pretvori u sql:

select * from Table1 where ID = 111

17 godina
offline
C# .NET - spajanje na bazu podataka

Ako kreiras DataSet, onda dobijes to slicno, i dopusta ti izradu upita preko designera, klikajuci.

Za ovakve jednostavne upite tipa Select * From tablica where polje=nesto, kao sto si ti napisao u primjeru, je moguce napraviti klasu i pozvati ju po potrebi. Za izradu treba nekoliko linija koda. 

Problem dolazi kod slozenijih upita, gdje DataSet Designer dopusta automatsku izradu sql upita. 

Ono sta c++ nema, to je strang typed rezultat. Znaci da kada idem na bazu preko DataSetova, imam podrsku intellisensa: tablica koju dobijem kao rezlutat ima polja: tablica.ID, tablica.Name, ... , i ne moram ih pozivati preko stringa ili indexa (tablica[1], ili tablica["id"]).

Pristup bazama ide preko ADO.NET frameworka (u VB6 je bio samo ADO, prije toga DAO ako se ne varam). 

Ako se radi sa MSSQL bazom i frameworkom 3.5, onda u igru dolazi LINQ2SQL, ali to je vec druga prica...

 

"A developer is a machine that converts coffee into code"
Moj PC  
0 0 hvala 0
17 godina
protjeran
offline
RE: C# .NET - spajanje na bazu podataka

Što se tiče intellisensa, u C++u svaka tablica je predstavljena Table objektom (koji se vidi intellisenom), a i svaki stupac neke tablice je automatski predstavljen varijablom koju možeš odmah pronaći intellisensom. Tako npr.:

 

Table1->Edit();  // editiraj tablicu (trenutni zapis)

Table1ImeKorisnika->Value = "NekakvoNovoIme";  // nova vrijednost stupca ImeKorisnika

Table1->Post();  // spremi (update)

 

I za rad na ovakav način nije potrebno pisati nikakve dodatne klase niti funkcije. Sve je integrirano automatski za svaki objekt koji predstavlja tablicu iz baze podataka. Štoviše, odmah su ugrađene funkcije poput first, last, prevoius i sl., za šetanje resultDataSet-om, i funkcije poput Edit, Insert, Append, Update kojima vršiš editiranje postojećeg ili dodavanje novog zapisa.

 

A što se tiče pristupa MSSQL-u tu nema nikakvih problema jer se koriste ADO komponente. Odabereš odgovarajući provider, bazu, a njene tablice predstaviš Table objektima, dok stupce te tablice varijablama i cijela stvar je rješena. Ista stvar i kada se koriste napredniji aspekti poput rada s stored procedurama. Krajnje jednostavno i bez iti jedne linije sql-a, dok ako netko baš želi može koristiti i sql.

 

Poruka je uređivana zadnji put sub 24.1.2009 17:58 (Tracer).
17 godina
offline
RE: C# .NET - spajanje na bazu podataka

Tebi treba nesto sto se zove Object-relational mapping (ORM).

Najpoznatiji ORM za bazu je Hibernate (Java) koji ima i svoju .NET verziju: NHibernate

 

 

Najveca prepreka u NHibernateu je opisivanje modela baze putem XML-a. Ako struktura baze nije previse komplicirana, najbolje je koristiti ActiveRecord koji ce se brinuti za XML i NHibernate.

 

Ideja ORM-a za bazu je kreirati punokrvne objekte (klase) za rad sa bazom. To cini ActiveRecord; stvara objekt koji odgovara tablici u bazi. Nema vise SQL-a, ConnectionStringova i opcenito diranja po bazi. Sve se radi putem ORM-a koji se brine o SQL-u i vrsti baze.

 

Umjesto SQL-a se rad s bazom svodi na objektno programiranje koje je "blize" programerima nego skriptiranje SQL-om.

 

Primjer:

 

Opisemo tablicu klasom:

[ActiveRecord]
public class Blog : ActiveRecordBase<Blog>
{
    private int id;
    private string name;
    private string author;

    [PrimaryKey]
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    [Property]
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    [Property]
    public string Author
    {
        get { return author; }
        set { author = value; }
    }
}

 

 

I zatim radimo ovako:
Blog blog = new Blog();
blog.id=1;
blog.name="Moj blog";
blog.author="Dado";
blog.Save();

 

Nakon toga se ActiveRecord dalje brine da tu klasu pretvori u XML koju NHibernate zna procitati. Nakon cega se NHibernate dalje brine o tome da to pretoci u SQL, spoji se na definiranu bazu i izvrsi kreiranje tog zapisa u tablici.

 

Jedna bitna napomena; putem ORM-a je potpuno svejedno da li je baza MySQL, Postgres, SQL Server, Oracle, SQLite, Access. NHibernate se brine o tome.

Poruka je uređivana zadnji put uto 3.2.2009 12:02 (dado).
17 godina
neaktivan
offline
C# .NET - spajanje na bazu podataka

Osim NHibernatea imaš i opciju korištenja LINQ jezika i LINQ 2 SQL-a ili Entity Frameworka.

 

Opišemo tablicu (i cijelu bazu) tako da ili ručno u XML-u ili ručno u vizualnom editoru kreiramo klase ili samo odvučemo tablice na plohu i dobijemo klase.

 

I onda to koristimo ovako:

 

DBC DB = DBC();

 

DB.Blogs.InsertOnSubmit(new Blog()

{

    id=1;

    name="Moj blog";

    author="Dado";

});

DB.SubmitChanges();

 

Cool

LOL @ http://www.youtube.com/watch?v=Y_uCjnuY9D4
Moj PC  
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice