[ batasson @ 13.04.2010. 09:17 ] @
Pozdrav!

Radim neki prostiji program koji pisem u C# i koji ce koristiti MS SQL bazu, pa imam par pitanja vezano za to.
Pa da pocnem:

1) Klijent program ce biti na nekoliko korisnickih racunara, a SQL server sa bazom na posebnom racunaru. E sada, da li ja parametre servera moram da pisem direktno u kodu programa i svaki put kada se promeni neki od parametara servera moram da menjam izvorni kod programa? Ili to moze da se resi na drugi nacin, u samom programu da se parametri servera unose preko posebne forme?

2) S obzirom da ce klijent program biti na nekoliko racunara, postojace mogucnost da se program koristi u istovremeno na nekoliko masina. Sta je u tom slucaju bolje, pisati standardne upite za unos, izmenu itd. ili je bolje pisati procedure?

Hvala svima na paznji :)

[ Dejan Carić @ 13.04.2010. 09:27 ] @
1) Konekcioni string može da se upiše u app.config ili web.config fajlu u zavisnosti od toga da li koristiš web service ili ne.

2) Zavisi od potreba (da li koristiš ORM mapper koji sam generiše sql kod, da li praviš dinamičke upite, itd). I jedno i drugo može da prođe.
[ cteba @ 13.04.2010. 10:16 ] @
Mozes i da upises u neki fajl (XML), pa da citas iz njega.

Imas puno mogucnosti, a najgora je praksa da upises direktno u kod.
[ AMD guy @ 13.04.2010. 10:22 ] @
Ja koristim Enterprise library zajedno sa app.config zbog enkripcije konekcionog stringa
[ batasson @ 13.04.2010. 10:28 ] @
Sad cu mozda biti malo naporan, ali jbg, nisam bas neki strucnjak......jos :)

Da li neko moze da mi pokaze kako bi taj konfiguracioni fajl izgledao na nekom primeru i kako da aplikaciju "uputim" da cita konfiguraciju iz tog fajla. Prvi put se susrecem sa ovakvim problemom pa bi mi primer dobro dosao.
-------------------------------------------------------------------------

Nasao sam primer, tj. vec generisan app.config koji sam dobio povezivanjem na postojecu bazu.
A kako bi resio u programu da kad otvara konekciju sa bazom pozove taj fajl?
[ mish_ns @ 13.04.2010. 10:48 ] @
Sto se tice connection string-a ja radim ovako:

U app.config :
Code:

 <appSettings>
    <add key="sqlConnectionString" value="Data Source=.\SQLEXPRESS;Initial Catalog=Tabela;Integrated Security=True"/>
  </appSettings>


I u kodu pozivas sa:
Code:

SqlConnection objConnection = new SqlConnection(ConfigurationSettings.AppSettings["sqlConnectionString"]);


Mada postoji i ovako neki nacin.
app.config
Code:

<connectionStrings>
        <add name="sqlConnectionString"
            connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Tabela;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>

U kodu
Code:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString);

[ Sapphire @ 13.04.2010. 17:39 ] @
Citat:
batasson:
1) ... E sada, da li ja parametre servera moram da pisem direktno u kodu programa i svaki put kada se promeni neki od parametara servera moram da menjam izvorni kod programa? Ili to moze da se resi na drugi nacin, u samom programu da se parametri servera unose preko posebne forme? ...


Naravno da možeš staviti posebnu formu, ali da li baš želiš korisnika zamarati time? Jedino što bi korisnik trebao znati je IP adresa server-a, baš njega briga šta je port / username ili ime baze ... Recimo, možeš napraviti login na početku u kojem imaš IP, te mogućnost da se isti "zapamti". Pokušaj se malo igrati sa tim sitnicama, puno znače kasnije (razumijem da je ovo program za vježbu?)

Citat:
batasson:
2) S obzirom da ce klijent program biti na nekoliko racunara, postojace mogucnost da se program koristi u istovremeno na nekoliko masina. Sta je u tom slucaju bolje, pisati standardne upite za unos, izmenu itd. ili je bolje pisati procedure?


Pitanje stored procedura vs. ad-hoc query upita je jedno od najčešćih pitanja, ali treba shvatiti da na to pitanje ne postoji jedinstven odgovor. Stored Procedure imaju svoje prednosti, kao i dinamički upiti. Razglabati sada o tome baš i nema smisla - vidim da pitaš šta je bolje u pogledu rada više korisnika istovremeno. Odgovor je isti kao maloprije. Radi sa oba, trebat će ti jednog dana, vjeruj. Upoznaj se za početak sa transakcijama, te sa Isolation Level-ima i Lock tehnikom u Sql Serveru. Nakon što napišeš prve upite kroz ADO.NET, počni eksperimentisati sa SqlTransaction objektom, preko:

Code:

SqlConnection connection = new SqlConnection(connectionString);
SqlTransaction transaction = connection.BeginTransaction();


Razumijevanje svih concurrency problema zahtjeva puno vremena, jer se radi o dosta širokom području. Za početak je dovoljno da si upoznat sa pojmom transakcija. Kasnije dolaze stvari kao što su optimistic i pessimistic concurrency itd...

[ batasson @ 14.04.2010. 09:09 ] @
@Sapphire
Citat:

Naravno da možeš staviti posebnu formu, ali da li baš želiš korisnika zamarati time? Jedino što bi korisnik trebao znati je IP adresa server-a, baš njega briga šta je port / username ili ime baze ... Recimo, možeš napraviti login na početku u kojem imaš IP, te mogućnost da se isti "zapamti". Pokušaj se malo igrati sa tim sitnicama, puno znače kasnije (razumijem da je ovo program za vježbu?)


Aplikacija ce biti koriscena u firmi u kojoj radim. Mislio sam da napravim jedan deo "Administracija" i tu da ubacim, izmedju ostalog, podesavanje za server. Aplikacija je za drugi diplomski rad (prvi je vec uradjen pre par godina, isto iz baza podataka ;) samo sto je access bio u upotrebi), a ujedno i da ga implementiram u firmu. Mozda dobijem povisicu :)

Citat:

Vidim da pitaš šta je bolje u pogledu rada više korisnika istovremeno. Odgovor je isti kao maloprije. Radi sa oba, trebat će ti jednog dana, vjeruj. Upoznaj se za početak sa transakcijama.


Mislio sam na transakcije, a ne na storne procedure. Lapsus. Ne zamerite :)


@mish_ns

Probacu sa ovim, pa ako zapnem opet negde....

Samo jos jedno pitanje. Kad zavrsim aplikaciju i iskopiram onaj .exe fajl na korisnicku masinu, gde treba da cuvam taj app.config fajl? Mora biti u istom folderu gde i .exe?
[ mish_ns @ 14.04.2010. 09:36 ] @
Da trebao bi da bude u istom folderu.
Kad bulid-ujes projekat u bin/Debug folderu imas npr. Projekat1.exe fajl i Projekat1.exe.config fajl.
Kopiras ta dva i trebalo bi da radi.