Avatar billede idiotbarn Nybegynder
27. januar 2006 - 23:27 Der er 12 kommentarer og
1 løsning

Del DB adgang mellem User Control's

Jeg har en masse user controls som bliver inkluderet på en side sammen. Problemet med dem er at for at det virker er at hver af dem åbner og lukker databasen når de bliver loaded.

Jeg inkludere dem med:
System.Web.UI.UserControl US = new System.Web.UI.UserControl();
US = (UserControl)US.LoadControl(ControllPath);
SitePlaceHolder.Controls.Add(US);

Kan jeg hente min database forbindelse fra den side der kalder control'en når det gøres på denne måde?

Jeg har ligeledes forsøgt mig med nedarvning fra System.web.ui.usercontrol gennem en klasse der ikke har andet en den egenskab der angiver en database forbindelse. Men har ikke fået det til at virke.

Er der nogen af jer der har en god ide til at løse dette, for det giver jo ingen mening at lukke en databaseforbindelse bare for at åbne den igen
Avatar billede idiotbarn Nybegynder
28. januar 2006 - 00:05 #1
Ok...Var lidt hurtig...
Fik løst problemet med:
(DatabaseConnection.DBConn)this.Parent.NamingContainer.GetType().InvokeMember("GetDB",System.Reflection.BindingFlags.InvokeMethod, System.Type.DefaultBinder,this.Parent.NamingContainer,null);

hvor GetDB bare er en funktion der retunere databaseforbindelsen...
Men hvis der er nogen der har en nemmere metode, så de velkomne til at sige til
Avatar billede snepnet Nybegynder
28. januar 2006 - 16:41 #2
baser dine usercontrols på en base der kan levere dig forbindelser, sådan som du selv gik igang med - det burde ikke skabe nogle problemer.. der må være en detalje i det du har haft lavet der har drillet.

det du har gjort med den kode du har vist er, at du har koblet dine kontroller uløseligt sammen med en namingcontainer der implementerer en specifik metode, og du har gjort det på en måde så compileren aldrig nogensinde vil kunne hjælpe dig med at sikre det....
og hvad nu når du skal wrappe dine kontroller i en anden namingcontainer?

det giver meget fin mening at du holder dine forbindelser åbne så kort tid som overhovedet muligt, så jeg vil anbefale dig at bevare din gamle løsning hvor kontrollerne

åbner
suger data
lukker

således at dine forbindelser er åbne så kort tid som muligt, og kontrollerne kan "leve" selvstændigt"....
(.net har inbygget connectionpooling).

men... hvis du har en stak klasser der allesammen skal hente data i den ene og anden forbindelse, synes jeg da at du skal lave dig et datalag, og så kalde det fra dine kontroller (eller fodre dem med data udefra).
så slipper du får at bikse med forbindelser etc. i hver eneste kontrol du har.

mvh
Avatar billede idiotbarn Nybegynder
28. januar 2006 - 17:02 #3
Så det vil sige det er bedre for mig at åbne-lukke 8-10 gange i stedet for at bare åbne, hente alt hvad jeg skal bruge og så lukke igen?

Tager det ikke "lang" tid at åbne/lukke en database?
Avatar billede snepnet Nybegynder
28. januar 2006 - 17:12 #4
jeps ... det vil normalt være bedre (så længe du husker at lukke dem ;o).
du kan læse lidt om connectionpooling her:
http://weblogs.dotnetforum.dk/frenz/archive/2005/10/27/68439.aspx
mvh
Avatar billede idiotbarn Nybegynder
31. januar 2006 - 16:13 #5
ok...takker...vidste godt der var noget der hed det, men må indrømme jeg aldrig har fået sat mig ind i det. God artikkel til lige at komme igang.

Ligger du et svar?
Avatar billede snepnet Nybegynder
02. februar 2006 - 23:52 #6
jeps - kommer her :o)
mvh
Avatar billede idiotbarn Nybegynder
07. februar 2006 - 16:15 #7
Ja og med lukke er det også med Dispose() right?
Avatar billede idiotbarn Nybegynder
07. februar 2006 - 16:20 #8
og skal lige høre...bør man også dispose med mysqlcommand og sådan?
Avatar billede snepnet Nybegynder
07. februar 2006 - 17:08 #9
principielt er det fint at udføre en dispose når du er færdig med at bruge objekter der implementerer IDisposable - du kan f.eks. benytte dette mønster:

using(MySqlConnection conn = new MySqlConnection(...))
{
  // brug forbindelsen her
}

ovenstående kompilerer til en try/finally, hvor du i din finally får kaldt dispose.

for øvrigt kalder close selv dispose.

mvh
Avatar billede idiotbarn Nybegynder
07. februar 2006 - 17:20 #10
Det gør den vel også med databasen, men man sikre bare at frigi pladser med det samme ik?

Og til aller sidst, et spørgsmål jeg tror er lidt irrellevant...
Hvis jeg laver en database forbindelse med:
namespace DatabaseConnection
{
...
public DBConn(String ConnString)
{
_ConnString = ConnString;
Conn = new MySql.Data.MySqlClient.MySqlConnection(ConnString);   
}
...
}

og senere åbner den med en anden funktion. GØr det så nogen foreskel om jeg øverst på en side laver en:
DatabaseConnection.DBConn DB;
for at kunne tilgå den forskellige steder senere som fx:

DB = new DatabaseConnection.DBConn(...);
DB.Open();
...
...
DB.Close();

...
...
DB = new DatabaseConnection.DBConn(...);
DB.Open();
...
...
DB.Close();



Eller er det bedre at oprette et helt nyt objekt hvergang og så kalde dem fx:
DB1...
DB2...
o.s.v

Eller er der fuldstændig ligemeget?
Avatar billede snepnet Nybegynder
18. februar 2006 - 01:49 #11
undskyld jeg ikke har været her :o(
er dine spørgsmål stadig aktuelle?
mvh
Avatar billede idiotbarn Nybegynder
18. februar 2006 - 01:52 #12
Hej...Det er ok. Det kører som det skal :)
Avatar billede snepnet Nybegynder
18. februar 2006 - 14:51 #13
fino :o)
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