21. oktober 2010 - 09:50Der er
12 kommentarer og 1 løsning
Stored procedure, bedste måde
Hej Eksperter
Jeg har før benytte SQL connection string, men vil gerne prøve at benytte Stored procedure. Jeg kan også godt få min Stored procedure til at retunere data, men hvilken måde er den bedste måde at hente data ud gennem en Stored procedure?
Jeg har prøvet at sætte direction til output, men denne funktion kan jo kun bruges når der kun er en linje/få værdier der skal ud. Jeg har også prøvet at bruge SqlDataReader, men hvis der ikke er nogle værdier den kan få fat i så laver den en fejl.
Er der er bedre måde at få flere værdier ud fra tabellen?
Du kan selvfølgelig selv bedre styre helt hvad der sker i dit datalag hvis du designer det hele fra bunden, men det er ingen skam at bruge de udviklede teknikker som efterhånden er på et niveau hvor du ikke vinder meget ved at skrive hele koden selv. Så efter min mening er der intet i vejen for at lave et datalag som benytter en private Entity framework klasse som tilgang til dine data. En kæmpe fordel ved at benytte en ORM, er jo at du hurtigt opdager hvis du linker til et felt som ikke eksisterer mere hvorimod datasource["slettet_feltnavn"] ikke vil give dig nogen advarsel når du bygger dit datalag, eller hvis du benytter en SP som har ændret signatur og du ellers opdaterer din ORM, så vil du opdage problemet allerede når du bygger din klasse.
>> Jeg vil helst vide 100 % hvordan koden jeg benytter fungere.
Hvis du primært benytter SP, så kan jeg ikke se problemet, da det er SP der afgører hvordan det spiller, ORM'en gør jo ikke meget mere end at kalde din SP og returnere det der skal returneres.
Så jeg kan varmt anbefale dig at fortsætte med at bygge dit grundlag på Stored Procedures hvor det er muligt, derved bruger du din SQL Server til det den er bedst til, nemlig at arbejde med data :-)
Jeg har fundet fejlen i min kode, jeg havde lagt rdr.close i finaly, så den lavede en fejl når den prøvede at lukke readeren, når der ikke var noget data at hente.
Ok, jeg troede godt nok ikke der var så mange muligheder, jeg har kun benyttet command og datareader, så dette vil jeg helt bare fortsætte med.
bkp-> Jeg ser du flere gange nævner EF som datalag, hvorfor mener du det skal fungere som datalag? Eller måske jeg skulle spørge, hvad er din definition på et datalag når vi snakker EF?
janus_007-> Det var absolut ikke meningen at jeg ville tale for at bruge EF som datalag, men mere som et godt værktøj i dit datalag.
Jeg mener ikke at Buisnes-laget skal have adgang til EF, men de kald du gør til dit datalag kan internt i datalaget benytte EF.
Jeg har selv tidligere siddet som dba og brugte dengang Linq to SQL som tilgang til mine data i datalaget, men det var kun internt, og det gav faktisk aldrig problemer, tværtimod fik jeg klar besked når datastrukturen havde ændret sig.
I dag har jeg en masse projekter på min arbejdsplads hvor datalaget benytter Linq to SQL eller EF (alt efter hvornår det blev designet)
Jeg er selv fortaler for alt andet end sprocs efterhånden, medmindre intet andet er muligt naturligvis, jeg vil faktisk vove den påstand at dynamisk sql i DAL'en er bedre :) og det kommer fra mig som har siddet små 10år tungt på MSSQL.
Jeg startede med L2S allerede dengang da intellisensen ikke virkede og har siden været stor fortaler for brugen af ORM.
Grunden til jeg spurgte lidt ind til det du skrev, er at du netop nævner DAL'en og dermed en skarp opdeling imellem BLL og DAL. Jeg kan ikke rigtigt se hvordan det ikke skal blandes sammen når man har IQueryable! Jeg bruger et repository-pattern istedet.
Bruger du kun IEnumerable eller IList ud fra datalaget da?
janus_007> Hej Janus Lige kommet hjem fra Anug.dk's jQuery Codecamp :-) og får gæster om lidt, så det bliver et kort svar ;-) Jeg bruger primært IList og benytter Linq på det returnede i mit BLL.
Ja var lige inde og chekke din blog, interessant du er på jQuery sådan der :)
Lad os diskutere videre en anden god gang :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.