[ bokac @ 24.02.2004. 17:54 ] @
Pozdrav svima, evo imam jedan problemcic u pitanju je ASP.NET i web.config fajl. Konkretno, hteo bih da u njemu cuvam konekciju (string) sa bazom i ukoliko je string podesen ka SQL Server-u sve se ponasa OK.

<appSettings>
<add key="ConnectionString" value="server=localhost;Trusted_Connection=true;database=NekaBaza" />
</appSettings>


ali kada pokusam da isto to uradim sa Access bazom,


<appSettings>
<add key="veza" value="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\NekiFolder\NekaBaza.mdb" />
</appSettings>

nece da radi! Ne mogu da otkrijem u cemu je stvar pokusao sam na vise nacina i nece da radi. Da li neko zna resenje? Hvala.


[Ovu poruku je menjao Dragi Tata dana 27.02.2004. u 09:45 GMT]
[ Acid @ 24.02.2004. 20:22 ] @
Nisam siguran, ali mislim da ne radi zbog putanje baze. SQL se uzima sa servera, a Access sa HD-a. Ima fora kako da se putanja sa HD-a prevede na adresu na serveru, ali to uspeva iz koda, nisam siguran da bi moglo i iz web.config fajla.
[ bokac @ 25.02.2004. 10:08 ] @
Pa da i meni se cini da ovo nije moguce iz web.config fajla, nista slicno nisam pronasao nigde uljucujuci i MSDN dokumentaciju, ali mislim da je to bezveze jer u ovom slucaju rad sa Access bazom je na neki nacin i osudjen na losu bezbednost.
[ nervozica @ 27.02.2004. 15:40 ] @
Probaj u svojoj putanji do baze da dodas localhost, nesto kao
Data Source=localhost:C:\Inetpub\wwwroot\NekiFolder\NekaBaza.mdb"

Mozda proradi. Ovo na slepo govorim nisam probao.
[ nristic @ 29.02.2004. 12:19 ] @
Ja stvarno ne znam zašto ti ne radi kad ja koristim isto tako i meni radi i lokalno i na serveru.
<add key="database" value="Provider=Microsoft.Jet.Oledb.4.0; Data Source=D:\wwwroot\baza\baza.mdb"/>

A ovako otvaram vezu

conn=New OledbConnection()
conn.ConnectionString=""& ConfigurationSettings.AppSettings("database") &""
conn.Open
[ mmix @ 01.03.2004. 15:41 ] @
Citat:
bokac:

<appSettings>
<add key="veza" value="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\wwwroot\NekiFolder\NekaBaza.mdb" />
</appSettings>



Problem je 99% sledeće prirode: pogledaj NTFS security za folder C:\Inetpub\wwwroot\NekiFolder i za fajl C:\Inetpub\wwwroot\NekiFolder\NekaBaza.mdb, najverovatnije je da user account pod kojim ti radi ASP.NET aplikacija (po defaultu, ASPNET pod IIS5 i NETWORK SERVICE pod IIS6/Windows2003) ima samo Read access (preko pripadnost Users grupi).
Podesi samo da taj account ima Create/Read/Write access na folderu (da bi mogao da kreira ldb fajl) i Read/Write na fajlu da bi naravno mogao da barata podacima. Javi šta si uradio pa da gledamo dalje ako nije ovo.

[ mmix @ 01.03.2004. 15:44 ] @
Citat:
nristic:
Code:

conn.ConnectionString=""& ConfigurationSettings.AppSettings("database") &""


Ovde si me sad zbunio, jel postoji neki valjan razlog što dodaješ prazan string na početak i kraj connection stringa?

[ nristic @ 01.03.2004. 21:53 ] @
Postoji.Jer kad ne stavim razmak izbaci mi grešku tipa undefined string.Ako se dobro sječam.

Citat:
mmix:
Citat:
nristic:
Code:

conn.ConnectionString=""& ConfigurationSettings.AppSettings("database") &""


Ovde si me sad zbunio, jel postoji neki valjan razlog što dodaješ prazan string na početak i kraj connection stringa?


[ mmix @ 02.03.2004. 08:56 ] @
Citat:
nristic:
Postoji.Jer kad ne stavim razmak izbaci mi grešku tipa undefined string.Ako se dobro sječam

E sad se tek nismo razumeli. Ti si na connection string koji ti vraća ConfigurationSettings.AppSettings("database") na početak dodao ""& i na kraj dodao &"", tj. connection string si umetnuo između dva prazna stringa (nigde ovde nema razmaka koji pominješ) čime po onome što ja znam nisi proizveo nikakav efekat (dvaput ništa je ništa, matematika je jasna, crva nije ni bilo ;)) tj. mogao si jednostavno da napišeš samo:
Code:

conn.ConnectionString= ConfigurationSettings.AppSettings("database")



[ bokac @ 02.03.2004. 18:52 ] @
I pored toga sto je u IIS podesen folder na Read/Write i sto sam fajl (baza) u njemu nije podesen na Read-only nece da radi. Odmah prilikom kompajliranja (u VS.NET-u) izadje greska kod reda:

conn.ConnectionString=ConfigurationSettings.AppSettings("database");

The type or namespace name 'ConfigurationSettings' could not be found (are you missing a using directive or an assembly reference?)

a to se desava u oba slucaja i ovako, a i kako nristic kaze kada se stave prazni stringovi na pocetak i kraj.

naravno prethodno u kodu sam normalno uklucio namespace:
using System.Data.OleDb;

Kada stranu pokusam da dignem preko Explorer-a on izabaci slicnu gresku:

Server Error in '/SAST1' Application.
The ConnectionString property has not been initialized.

Line 39: conn.ConnectionString=ConfigurationSettings.AppSettings("database");

Stvarno nemam resenje ponavljam da sve ovo odlicno radi kada se umesto Access baze radi sa SQL Server-om 2000, ili ukoliko se Access baza normalno string-om poziva iz samog aspx.cs fajla ali ne i iz web.config u okviru istih podesavanja (IIS, fajl,...).

[ mmix @ 02.03.2004. 19:22 ] @
Citat:
bokac:
I pored toga sto je u IIS podesen folder na Read/Write i sto sam fajl (baza) u njemu nije podesen na Read-only nece da radi. Odmah prilikom kompajliranja (u VS.NET-u) izadje greska kod reda:

conn.ConnectionString=ConfigurationSettings.AppSettings("database");

The type or namespace name 'ConfigurationSettings' could not be found (are you missing a using directive or an assembly reference?)

a to se desava u oba slucaja i ovako, a i kako nristic kaze kada se stave prazni stringovi na pocetak i kraj.
naravno prethodno u kodu sam normalno uklucio namespace:
using System.Data.OleDb;


Moraš da dodaš i
using System.Configuration;

U ovom namepsace-u se nalazi statička klasa 'ConfigurationSettings', zbog toga ti kompajler daje gornju grešku. Ajde probaj sa ovim pa da vidimo dalje. Ako radi sa hardcodovanim connection stringom kao što kažeš onda nije NTFS u pitanju. Što se tiče praznih stringova, ja stvarno mislim da je to skroz nepotrebno i bez efekta...

[ bokac @ 03.03.2004. 11:05 ] @
U pravu si mmix nisam bio ukljucio namespace Configuration. Ali sada ovako stoje stvari. Ovo je list svih ukljucenih namespace-ova:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.Configuration;


ali kompajler i dalje izbacuje gresku:

'System.Configuration.ConfigurationSettings.AppSettings' denotes a 'property' where a 'method' was expected

kod reda:
conn.ConnectionString=ConfigurationSettings.AppSettings("database");

kada se podigne direktno iz Explorer-a izbacuje gresku:

The ConnectionString property has not been initialized.

Line 39: OleDbConnection conn=new OleDbConnection();
Line 40: conn.ConnectionString=ConfigurationSettings.AppSettings("database");
Line 41: conn.Open();


Ne znam da nisam propustio jos neki namespace. Pokusao sam tu jos nesto da kombinujem ali bezuspesno.

*Napomena da ne bude zabune key="veza" ili "database" sve je jedno.

[Ovu poruku je menjao bokac dana 03.03.2004. u 19:54 GMT]
[ dusans @ 03.03.2004. 12:49 ] @
U prvoj poruci si naveo da ti je key "veza" a u ostalim delovima teksta koristis key "database", da nije u tome problem?
[ bokac @ 03.03.2004. 17:48 ] @
Izvinjavam se ako je to dovelo do zabune key jeste "veza", ali u prepisci sa nristicem i mmixom neko (nristic) je ubacio naziv "database" pa sam ja to prisvojio posto to logocki ne menja stvar, ali ako treba izmenicu poruku iznad.
[ mmix @ 04.03.2004. 14:47 ] @
Citat:
bokac:

The ConnectionString property has not been initialized.

Line 39: OleDbConnection conn=new OleDbConnection();
Line 40: conn.ConnectionString=ConfigurationSettings.AppSettings("database");
Line 41: conn.Open();



Ovo je baš uvrnuto, naročito zato što puca na konstruktoru!?! Koja verzija Frameworka je instalirana? 1.0
I nije mi jasno, kako uspeš da dodješ to runtime greške ako ti je pre toga kompajler izbacio grešku? Valjda se tada prekida build i ne dobiješ novi DLL sa kojim možeš u runtime. Da ti se ta runtime greška ne vuče iz DLLa od kod zna kad.

Ajde probaj da spojiš kod u ove dve linije, da probamo sa alternativnim konstruktorom

OleDbConnection conn=new OleDbConnection(ConfigurationSettings.AppSettings("database"));
conn.Open();



[ bokac @ 05.03.2004. 01:13 ] @
Pokusao sam i na taj nacin sa konstruktorm ali na zalost ni to ne menja stvar:

(39): 'System.Configuration.ConfigurationSettings.AppSettings' denotes a 'property' where a 'method' was expected

Ne znam, posto to radi u prinicipu istu stvar, mislim da nije bilo nekog narocitog razloga da kompajler ovo proguta.
Za DLL si potpuno u pravu, totalno sam rasejan : ).
Sto se tice verzije framework-a instalirana mi je 1.0. Hvala mmix vidim da se trudis da mi pomognes ali ni meni nije jasno ako bi ovo trebalo normalno da radi sta kod mene to onda nedostaje?
Jedino mozda da napravim novi solution pa polako da ukljucujem jednu po jednu stvar iz pocetka, ali mislim da ni to nece pomoci.
[ nervozica @ 05.03.2004. 09:52 ] @
a da to sve lepo stavis u Global.asax

nesto poput ovoga:
u Application_Start stavis
Application.Add("ConnString", "data source=Baza;initial catalog=books;persist security info=False;user id=sa;workstation id=ComputerName;packet size=4096")

a pozivas:

conn.ConnectionString = Application.Get("ConnString")
[ bokac @ 05.03.2004. 11:13 ] @
Ajde sada kazi mi iskreno, jel to kod tebe radi?
[ mmix @ 05.03.2004. 11:24 ] @
Citat:
nervozica:
a da to sve lepo stavis u Global.asax
nesto poput ovoga:
u Application_Start stavis
Application.Add("ConnString", "data source=Baza;initial catalog=books;persist security info=False;user id=sa;workstation id=ComputerName;packet size=4096")
a pozivas:
conn.ConnectionString = Application.Get("ConnString")


web.config je uveden da bi se razdvojio razvoj od administracije. Promena web.config fajla tokom rada aplikacije restartuje aplikaciju, ali je to prihvatljivo i to može i treba da radi administrator. Promena global.asax fajla zahteva vraćanje projekta u razvoj i ponovan rebuild i redeploy aplikacije, što mora da radi razvojni tim, koji po običaju ima i nešto pametnije da radi od promene konfiguracije. :) Zato je bolje sve što se tiče konfiguracije držati van koda.

Što se tiče problema, ajmo sledeće, pošto imaš v1.0 reinstaliraj .NET framework SDK (nemoj stavljati SDK1.1 ako imas prvi VS.NET). On ti je na raspolaganju kao poseban setup sa poslednjeg diska instalacije VS.NETa. Možda će ovo rešiti stvar.

[ mmix @ 05.03.2004. 11:34 ] @
Citat:
Ajde probaj da spojiš kod u ove dve linije, da probamo sa alternativnim konstruktorom

OleDbConnection conn=new OleDbConnection(ConfigurationSettings.AppSettings("database"));
conn.Open();


Hahaha, e stvarno sam lik... Ovo me podseća na za*eb sa

While (1) { // do something }


Elem, sve vreme se igramo sa sintaksnom greškom, AppSettings je kollekcija, ne funkcija, dakle gornja linija treba da je:


OleDbConnection conn=new OleDbConnection(ConfigurationSettings.AppSettings["database"]);
conn.Open();


Obrati pažnju na kockaste zagrade

Pozdrav
[ nervozica @ 05.03.2004. 13:13 ] @
naravno da radi. Dokaz: www.ljubiteljiknjige.co.yu

i da mmix je u pravu. Mudre reci zboris mmix.
[ bokac @ 05.03.2004. 18:01 ] @

OleDbConnection conn=new OleDbConnection(ConfigurationSettings.AppSettings["database"]);
conn.Open();


Tooooooo, je bilo resenje problema "[ ]" zagrade. Da, da sada sve savrseno radi bas onako kako treba. Reinstalacija frameworka-a!? Ne znam da li sada za tim ima potrebe sve odlicno fukncionise. Hvala mmix, kao i svima ostalima na pomoci.