C# Access konekcija

C# Access konekcija

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

uplivao sam u vode C#-a Smile. i sobzirom da sam stavljao kod za VB/VB.NET kako se konektuje na Access bazu, sto to ne bih rekao i za C#, jelte Smile

Tip: najbolje je da ovo ubacite u klasu kao sto sam ja, kako bi posle lako mogli da ga koristite.

klasu sam nazvao ConnectionEngineClass, a vi nazovite kako god zelite.

tu klasu stavite u namespace ConnectionEngine

using System; using System.Forms; using System.Data.Odbc; namespace ConnectionEngine {     public class ConnectionEngineClass     {         public OdbcConnection conn = new OdbcConnection("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" + Application.StartupPath + "\\ime_baze.mdb");         // otvara konekciju         public void OpenConn()         {             conn.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" + Application.StartupPath + "\\ime_baze.mdb";             conn.Open;         }         // zatvara konekciju         public CloseConn()         {              conn.Dispose();              conn.Close();         }     } // end class } // end namespace

kada ste napisali ono osnovno za otvaranje i zatvaranje konekcije prema bazi, ostaje da vam kazem kako posle sve to funkcionise.
za ovo vam je potrebno poznavanje SQL upita jer se sve oko njega vrti

otvaranje konekcije se radi tako sto se prvo napravi nova instanca klase koju smo malo pre napravili. sve to ilustruju sledeci kod.

// prvo moramo da 'ukljucimo' ConnectionEngine namespace inace bas nece raditi ;) using ConnectionEngine; using System.Data.Odbc; // nova instanca klase ConnectionEngineClass c = new ConnectionEngineClass(); c.OpenConn(); OdbcCommand cmd = new OdbcCommand("SELECT * FROM korisnici;",c.conn); OdbcDataReader dr = cmd.ExecuteReader(); while (dr.Read()) {     MessageBox.Show("Vase korisnicko ime je: " + dr["korisnicko_ime"]); } c.CloseConn();

ovako se radi sa SQL upitom koji vraca vrednost. za ostale SQL upite koji ne vracaju rezultat (INSERT, UPDATE, DELETE), koristi se cmd.ExecuteNonQuery(); umesto cmd.ExecuteReader();

posle ovoga vam ne treba while, jer nista ne citate.

to je to. ako pronadjete gresku, prijavite Wink.
isto tako, otvoren sam na komentare i kritike...



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 08 Jan 2005
  • Poruke: 14

Blago bi se osvrnuo na definiciju tvoje klase ConnectionEngineClass --- prilikom definisanja objekta konekcije tipa OdbcConnection izvršio si njegovu inicijalizaciju sa sve postavljenim stringom konekcije kao parametrom konstruktora za kreiranje objekta 'conn'. Potom si u telu javnog metoda
public void OpenConn()
{
conn.ConnectionString = "DRIVER={Microsoft Access Driver
(*.mdb)}; DBQ=" + Application.StartupPath + "\\ime_baze.mdb";
conn.Open;
}
ponovio istu stvar nepotrebno, pošto je string za konekciju tom objektu već pridružen. Dovoljno je da si u telu metoda samo izvršio otvaranje konekcije, tj.
public void OpenConn()
{
conn.Open();
}

Eto od mene toliko, a od koga je i to nije baš malo !
Pozdrav !



offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

ne secam se sada, ali nije htelo da radi dok ConnectionString nisam ponovo napisao... pogledacu i probati... hvala na kritikama (doduse jednoj) Wink

offline
  • Pridružio: 08 Jan 2005
  • Poruke: 14

snoop ::ne secam se sada, ali nije htelo da radi dok ConnectionString nisam ponovo napisao... pogledacu i probati... hvala na kritikama (doduse jednoj) Wink
Ako kažeš da nije htelo da radi , a ti onda inicijalizuj ( kreiraj ) objekat 'conn' konstruktorom bez parametara, a u javnom metodu public void OpenConn() ostavi property ConnectionString onako kako si ga postavio. U svakom slučaju, jedno ti je višak !
Pozdrav !
E da, skoro da zaboravim --- kada pristupaš bilo kojem "spoljnom" resursu, ne bi bilo loše da kod "trpaš" u try blok try - catch - finally strukture.
Ukoliko bilo šta krene naopako ( nema konekcije sa bazom, itd ), blok "catch" će da ti uhvati izuzetak. Uzgred, zatvaranje konekcije postavi obavezno u blok "finally", jer sa taj blok uvek izvršava, bez obzira da li je došlo do greške ili ne --- šteta bi bilo konekciju ostaviti otvorenom !
Ovo sa try - catch - finally ti je mnogo dooooooobra stvar, čitucni to malo, prosto je !

offline
  • poc 
  • Novi MyCity građanin
  • Pridružio: 11 Okt 2005
  • Poruke: 3

df

offline
  • Pridružio: 14 Feb 2004
  • Poruke: 142
  • Gde živiš: Ruma, Vojvodina

Zar nije logicno napisati klasu na sldeci nacin:

// otvara konekciju         public void OpenConn(string dbName)         {             conn.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" + Application.StartupPath + "\\" + dbName + ".mdb";             conn.Open;         }

mislim radi toga da ljudi koji prave konekciju na ovakav nacin (sto je i logicno) ne moraju svaki put ponovo da kompajliraju ceo projekat i svaki put menjaju naziv baze. Rasmisli malo pa promeni kod, ima tu jos propusta ... Smile

U svakom slucaju svaka cast za trud ...

I jos nesto: sto se tice ovog nacina definisanja promenljive conn iz prostora imena "Odbc", mislim da treba da radi. Kao sto je Milivoj rekao, izbaci to. Uradi na sledeci nacin:

// otvara konekciju         public void OpenConn(OdbcConnection connect, string dbName)         {             connect.ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" + Application.StartupPath + "\\" + dbName + ".mdb";             connect.Open;         }         // zatvara konekciju         public CloseConn(OdbcConnection connection)         {              connect.Dispose();              connect.Close();         }

onda u glavno porjektu definises ponovo OdbcConnecton:
public OdbcConnection newconn;

sada pozoves ovu funkciju (za konenciju) na sledeci nacin:

OpenConnection( newconn, "ime_baze" ); i CloseConnection( newconn );

na ovaj nacin izbegavas bespotrebno kucanje koda i olaksavas sebi rad ...

Pozdrav.

offline
  • Pridružio: 18 Apr 2003
  • Poruke: 8134
  • Gde živiš: U kesici gumenih bombona...

@ Mandrake

Primetio sam ja dosta gresaka koje sam ispravljam.
Tu klasu stalno updateujem kada nadjem nesto zaniljivo sto bih mogao ubaciti u nju.
Sada ima podrsku za tri baze.

Kada sam pisao f-ju, nisam isao na uredjivanje koda da lepo izgleda. Nije fokus na tome (mada hvala na sugestijama).

Inace, ja koristim ConnectionString koji je upisan u Web.Config (kada radim sa ASP.NETom) kako ne bih morao promenom CS compajlirati App ponovo prilikom upload-a na server.

Ovde je najnovija verzije iste.
http://www.mycity.rs/phpbb/viewtopic.php?t=24655

Ko je trenutno na forumu
 

Ukupno su 969 korisnika na forumu :: 56 registrovanih, 10 sakrivenih i 903 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _commandos_, A.R.Chafee.Jr., AK - 230, alkatraz080, aramis s, Bahuss, Cvijo_ue, danilopu2, djboj, Dorcolac2, draganca, Duh sa sekirom, Filip Marinković, flash12, Fog of War, gorangogs88, GreenMan, hyla, ILGromovnik, indja, ivan979, kvcali, lacko, Leonardo, limeni2, ljubo70, MaksicZoran, Markobg, Megapurpletv, mercedesamg, Mihajlo2, Milan A. Nikolic, miodrag, Mixelotti, Nesho2, ok2, ostoja, ozzy, pein, Penzula, PrintZip, repac, robertino, sasa.zoric, Sirius, Snorks, srbi, srbijagolubovirs, suton2, Vlad000, vlvl, voja64, zixmix, zodiac94, zoranlik, Zori