Avatar billede drengen Nybegynder
07. juni 2005 - 14:44 Der er 6 kommentarer

DataBind() lukker DB connection

Jeg har to Repeater Controls. Begge skal fyldes med data fra en SqlDataReader, vha. NextResult() metoden på SqlDataReader objektet.

Jeg benytter "CloseConnection" som CommandBehavior når jeg eksekverer ExecuteReader på SqlCommand objektet, som resulterer i at min DB connection lukkes i samme øjeblik den returnerede SqlDataReader lukkes.


Simpificeret eksempel:

Repeater1.DataSource = reader;
reader.NextResult();
Repeater2.DataSource = reader;
Page.DataBind();


Problmet er, at når DataBind metoden kaldes på Repeater1, lukkes min SqlDataReader automatisk, og dermed også min DB connection, grundet CommandBehavior.CloseConnection.
Udelukker jeg denne CommandBehavior, er der ingen problemer.

Da det ikke er en mulighed at udelukke CommandBehavior.CloseConnection, skal problmet løses på en anden måde.

Jeg er ude efter at min SqlDataReader IKKE lukkes ved DataBind. Dvs. at på en simpel måde skal override Repeater Control'ens finalizer/dispose kode, og sørge for at dette ikke sker.

Er det muligt? Andre løsninger?

Vigtigt. Jeg er kun interesseret i at benytte SqlDataReader direkte som DataSource, pga. performance.


På forhånd tak.
Kim Andersen
Avatar billede snepnet Nybegynder
07. juni 2005 - 18:47 #1
hej kim :o)

det virker lidt som om du spørger efter noget umuligt... CommandBehavior.CloseConnection er et krav, men forbindelsen må ikke bliver lukket.
... hvornår har du tænkt dig at lukke den så, og hvordan ?

mvh
Avatar billede drengen Nybegynder
22. juni 2005 - 22:09 #2
Hej snepnet


Dét at DataBind metoden automatisk lukker f.eks. en SqlDataReader når den har itereret gennem det aktuelle Result Set, er åbenbart en design-beslutning taget hos Microsoft. Jeg mener det konfllikter med det faktum, at en SqlDataReader kan indeholde flere Result Sets, hvorfor en DataBind metode ikke automatisk bør lukke SqlDataReader'en.
Jeg er overbevist om at Microsoft's beslutning hviler på vigtigheden ifm. med at lukke SqlDataReader'ere snarest muligt efter brug, og at netop DataBind metoder kan være en faldgruppe for mange udviklere.

Mhs. til dit spørgsmål, så kan man altid manuelt lukke SqlDataReader'en, og dermed sin SqlConnection.

Måske er modellen umulig som ASP.NET 1.1 er designet nu, men jeg mener at det er en interessant mulighed, især i n-tier arkitekturer.
Avatar billede arne_v Ekspert
23. juni 2005 - 20:27 #3
nu bør man efter min mening aldrig bruge SqlDataReader udenfor et Data Access Layer så ...
Avatar billede drengen Nybegynder
23. juni 2005 - 20:39 #4
Det vil jeg til dels give dig ret i, arne v.
Desvære løser den diskussion ikke det aktuelle problem.
Avatar billede arne_v Ekspert
23. juni 2005 - 20:47 #5
korrekt - det var kun en kommentar til den med n-tier
Avatar billede burningice Nybegynder
25. juni 2005 - 10:25 #6
drengen>> til dels? nej, i en n-tier løsning skal en DataReader ikke bruges til at binde til f.eks. en repeater, så simpelt kan det siges. Jeg vil næsten gå så langt til at sige det projekt som indeholder koden til ens aspx-sider bør kunne compileres uden en reference til System.Data.dll.

Omkring en løsning på dit problem og til spørgsmålet omkring det er muligt... så ja, du kan lave din egen DrengenSqlDataReader, det er bare at lave en klasse der implementerer IDataReader-interfacet.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester