Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera

[es] :: .NET :: Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera

[ Pregleda: 2249 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

gotivac
Kragujevac

Član broj: 26754
Poruke: 160
*.pat-pool.kg.sbb.co.yu.



+2 Profil

icon Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera25.03.2006. u 22:54 - pre 219 meseci
Imam jedan problem, koji zapravo to i nije, ali gnjavi i zbunjuje, pa ako neko zna o čemu se radi ...

Platforma je Visual Studio 2005 (VB) i Access baza. Pokušaću na što jednostavnijem primeru da objasnim.
Recimo da iz neke tabele treba izlistati sve slogove koji, nema veze, recimo imaju šifru koju korisnik bira. Dakle, na formi korisnik popuni tekst polje za šifru, i neka promenljiva, recimo strSifra dobije tu vrednost.

U ranije kreiranom datasetu kreiram TableAdapter sa FillBy komandom kojoj prosledjujem ovu sifru kao parametar, recimo:

Me.UslugeDataSet.PrometTableAdapter.FillBy(strSifra)

E, sad, problem je kod kreiranja upita. Recimo da u parametre SQL upita ubacim parametar koji se zove SIFRA. Napišem query:

SELECT * FROM Promet WHERE (SifraProizvoda = @SIFRA).

Ovo radi bez ikakvih problema, ali šta se dešava - kad otkucam ovakav query, dobijem poruku o grešci:

The wizard detected the following problems when configuring the TableAdapter: "Fill";
Details:

Generate SELECT statement
Error in WHERE clause near '@'.
Unable to parse query text.

Click OK to ignore this dialog and finish the wizard, or click Cancel to return to the wizars and reconfigure your adapter.


Kliknem na OK i to dalje sve radi bez problema. Ponekad, kada ulazim ponovo da petljam po tom query-ju, sam mi razdvoji @ i SIFRA, pa moram da brišem space izmedju njih da bi radilo, a ako više čačkam, hoće i da pogubi parametre TableAdaptera, pa moram iznova da ih kreiram...

Znači, to sve radi OK, samo gnjavi porukom o grešci prilikom kreiranja i uliva dozu nesigurnosti ...

Zna li neko o čemu se radi, da li je u pitanju bug ili ja negde grešim???
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera26.03.2006. u 12:20 - pre 219 meseci
Ako se ja ne varam Access ne podrzava imenovanje parametara. Probaj umesto
Code:

SELECT * FROM Promet WHERE (SifraProizvoda = @SIFRA)

da napises
Code:

SELECT * FROM Promet WHERE (SifraProizvoda = ?)
 
Odgovor na temu

gotivac
Kragujevac

Član broj: 26754
Poruke: 160
*.pat-pool.kg.sbb.co.yu.



+2 Profil

icon Re: Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera26.03.2006. u 13:04 - pre 219 meseci
Pa, pazi, očigledno podržava pošto ovo kao što sam napisao radi, samo iritira dosadnom porukom o grešci. U krajnjem slučaju, aplikacija ne prosledjuje naziv parametra Access-u, već njegovu vrednost, tako da (valjda) i nema veze sa Access-om.

A kako misliš da prosledim parametar ako ga ne imenujem? Recimo da treba izabrati transakcije koje su se desile u odredjenom periodu, znači treba proslediti šifru proizvoda, početni i krajnji datum. To su 3 parametra, kako da ih prosledim bez imenovanja? Ne verujem da bi prošlo nešto kao:

Code:

SELECT * FROM Promet WHERE (SifraProizvoda = ?) AND ((DatumTransakcije >= ?) AND (DatumTransakcije <= ?))


dok

Code:

SELECT * FROM Promet WHERE (SifraProizvoda = @SIFRA) AND ((DatumTransakcije >= @DATUM_OD) AND (DatumTransakcije <= @DATUM_DO))


sasvim normalno radi, ali gnjavi sa greškom.

I ne verujem da ovo ima veze sa Access-om, jer prilikom pisanja SQL komande prijavljuje sintaksnu grešku, znači nije još ni pipnuo bazu, a k**** da nešto ne valja iako sve radi.

Huh!



[Ovu poruku je menjao gotivac dana 26.03.2006. u 14:07 GMT+1]
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera27.03.2006. u 14:48 - pre 219 meseci
Citaj malo MSDN.
Ovo ti pise kod klase OleDbParameterCollection

Citat:

The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used. For example:

SELECT * FROM Customers WHERE CustomerID = ?


E sad, mala ispravka mozda i access podrzava imenovanje parametara ali to preko OleDB provajdera nece ici.

Citat:

A kako misliš da prosledim parametar ako ga ne imenujem? Recimo da treba izabrati transakcije koje su se desile u odredjenom periodu, znači treba proslediti šifru proizvoda, početni i krajnji datum. To su 3 parametra, kako da ih prosledim bez imenovanja? Ne verujem da bi prošlo nešto kao:


I to pise na MSDN

Citat:

Therefore, the order in which OleDbParameter objects are added to the OleDbParameterCollection must directly correspond to the position of the question mark placeholder for the parameter in the command text.



[Ovu poruku je menjao negyxo dana 27.03.2006. u 15:50 GMT+1]
 
Odgovor na temu

Oliver Klaćik
Vice President, Thunder Road Software
Inc.
Stara Pazova

Član broj: 34059
Poruke: 242
80.93.231.*

Sajt: www.thunderroadsoftware.c..


Profil

icon Re: Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera27.03.2006. u 21:33 - pre 219 meseci
Baš danas sam se zezao sa tim.

Ako imamo npr. sledeći Sql uslov 'WHERE ID = ?', VS će napraviti imenovani parametar sa nazivom ID, koji se posle može videti i u InteliSensu. Jeste malo čudno (oduzelo mi sat vremena, bezveze), ali je tako...
Oliver 'FAQ' Klaćik
 
Odgovor na temu

[es] :: .NET :: Problem sa prosledjivanjem parametara FillBy komandi TableAdaptera

[ Pregleda: 2249 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.