» »

SQL stored procedure in .NET aplikacija - pomoč

SQL stored procedure in .NET aplikacija - pomoč

Bergyb ::

Zdravo,
imam sledeč problem in ne najdem rešitve na googlu... oziroma preveč slabih rezultatov dobim, ali pa ne iščem prav.

Problem je sledeč:
imam .NET aplikacijo (v aplikaciji so dodani table adapterji), ki je povezana na SQL server 2005 in kliče stored procedure (so definirane/shranjene na serverju).
Klicev procedur je veliko, ker je tudi v istem času zagnanih dosti aplikacij, se pa vsake toliko časa zgodi, da pričnejo procedure dobivati nazaj napačne podatke, npr. kličejo se po vrsti: dobiVreme(), dobiLeto(), dobiMesto(), dobim pa za vreme kr nekaj, za leto dobim "dežuje", za mesto pa "2012", vse dobivam z zamikom. Za foro sem dodal še funkcijo getNothing() -ne naredi ničesar na bazi, ki vsake toliko časa dobi neko vrednost...
Čisto vseeno je, če so procedure v različnih table adapterjih, še vseen lahk dobi napačen podatek iz baze.

Napaka se pojavi vsake toliko časa, vendar vsaj 1x na dan na eni od zagnanih aplikacij. Šele ob ponovnem zagonu aplikacije se ta napaka odpravi (vrjetno, ker se na novo vzpostavi povezava z bazo). Po ponovnem zagonu lahko ponovimo scenarij, vendar se napaka ne pojavi več.
Nisem še poskusil, da bi povezavo z bazo zaprl in zahteval novo, brez ponovnega zagona aplikacije, samo vseeno, to ni rešitev...

Torej, SQL server na sklad nalaga podatke, ki jih vračajo procedure in ob klicu nove procedure vrne tistega, ki je najdlje na skladu, če tudi ga ni zahtevala ta procedura? Je potem vsaj možnost, da ta sklad spraznem?

Hvala za pomoč

Looooooka ::

Bi prej rekel, da je problem v aplikaciji.Table adapterji ti ze nebojo vracal nece kar niso dobili z zahtevkom.
Najvecja verjetnost je, da aplikacija se kje izvaja kaksne druge klice in prihaja do race conditiona in ti pac kjerkol ze to izpisujes druga funkcija/event izpisuje svoj rezultat.

Prvo vprasanje bi blo ce se v aplikaciji kj igras s threadi...
Druga moznost je da pac stored procedure vracajo drek... :)

Zgodovina sprememb…

  • spremenilo: Looooooka ()

Bergyb ::

Threadi so bli popravlen, tk da jih sedaj izvaja glavni program, se ne morjo istočasno izvajat. S threadom mi je edino uspel narediti napako, da sem med debagiranjem dobival za neko proceduro rezultat druge procedure, s tem, da se je v threadu vsake 100ms klicala neka get procedura z baze.
Drugače pa mam spremenljivke npr. za zgoraj opisan primer:
string vreme = getVreme();
string leto = getLeto()...
Ali pa namesto string, da vrača table adapter.

Exception se ulovi le v primeru, ko želim za nek table adapter brati specifičen podatek, ki seveda ne obstaja, ker je od baze dobil nekaj drugega.
Primer klica procedure string a = getNothing() (ne naredi ničesar, ne vrača ničesar) je težavo na določenem delu odpravil -dobival je vrednosti, katere so zahtevale druge procedure, nato se je klicala nova in dobila pravo vrednost nazaj. Sam potem bi moral ta getNothing() dat pred vsakim klicom procedure v kodi...

Looooooka ::

Ta klice je nepotrebe.Problem je 100% nekje drugje.
Ce uporabljas vec threadov...oz eventov in delas te klice z razlicnih koncev.
A je mozno, da uporabljas isti dataset ali dataadapter.Se pravi da mas enga globalnega staticnega...
Ce je odgovor ja...potem bos moral vse te klice sinhronizirat.
Oz glede na to, da je to slaba praksa...ne uporabljat isti adapter/dataset.

Zgodovina sprememb…

  • spremenilo: Looooooka ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Entity Framework

Oddelek: Programiranje
6952 (783) frudi
»

Baza & c#

Oddelek: Programiranje
214156 (3214) xardas
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211782 (1266) Mitja Bonča
»

Triger pokliče java funkcijo?

Oddelek: Programiranje
111524 (1287) krneki0001
»

Izvorna koda mojega par dnevnega dela; ce jo malo pokomentirate :) (strani: 1 2 )

Oddelek: Programiranje
606444 (4789) Microsoft

Več podobnih tem