Avatar billede carparknorth Nybegynder
20. januar 2006 - 19:29 Der er 7 kommentarer og
1 løsning

SqlClient - Mange connections

Hejsa,

hvordan kan det være at når jeg bruger SqlClient som min klient mod min SQL Server 2000, så opretter den forholdsvis mange forbindelser? Og lukker dem først efter rigtig lang tid?
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 21:46 #1
Tja, det bliver nok svært at svare på uden noget kode :o)

Måske bliver dine connections ikke lukket igen? Måske har du en masse transaktioner, som hænger og låser for hinanden.
Avatar billede carparknorth Nybegynder
20. januar 2006 - 22:34 #2
Det er rimelig svært at poste kode, da det er et forholdsvis stort system, og det er egentlig bare generelt.

Jeg har lige prøvet at skifte til OleDb, men den opretter stadig i snit 3 connections pr. bruger?? Jeg synes det lyder lidt vildt.

Min connection string ser sådan her ud.

SqlClient:
Data Source="minserver";Initial Catalog="MinTabel";User Id="MinDbKlient"; Password = "MinDbKlientPW"
Skal jeg overveje noget med Connection Pooling ved SqlClient??

OleDb
Provider=sqkikedb;Data Source=Minserver;Initial Catalog=MinTabel;User Id=... Password...

Ved ikke lige hvad der sker. Jeg har bygget en slags "stats" ude til venstre på min side. Denne "menu" vises på alle sider. Kan den have noget at gøre med det?
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 22:55 #3
I .NET foretages der automatisk connection pooling. Den benytter connectionstrengen til connection pooling, så du skal være sikker på, at du altid benytter den samme streng. Ellers ingen pooling.

Prøv at gå koden igennem og tjek, at du får lukket connections efter du har læst/skrevet til databasen.

Da du benytter en MS SQL Server er der ingen grund til at bruge OleDb. Og antallet af åbne connections har ikke noget med dit valg af DbProvider at gøre, så hold endelig fast i SqlClient. De åbne connections skyldes et eller andet i din kode.

Benytter du DataReaders i dit program eller benytter du DataAdapters til at fylde nogle DataTables? Hvis du benytter DataReaders skal de også lukkes efter brug eller holdes connection åben.
Avatar billede carparknorth Nybegynder
20. januar 2006 - 23:29 #4
Ok.. Tak for hjælpen. Jeg holder fast i SqlClient.

Jeg har et par DataReaders, der fylder Repeater. Jeg synes det bliver lukket, men det kan være jeg tager fejl.

connection.Open()
SqlCommand command = new SqlCommand("SQL SELECT-sætning",connection);
SqlDataReader dtrCat = command.ExecuteReader();

if (dtrCat.HasRows)
{
  myRepeater.DataSource = dtrCat;
  myRepeater.DataBind();
}
else
{
  // Label udskrives om at der ikke kan findes nogle data
}
dtrCat.Close();

Det er pakket ind i en try-catch-finally. Finally lukker selvfølgelig forbindelse, altså connection.Close(); Kan det være problemet? At Finally ikke bliver eksekveret?
Hvis man har en SELECT-sætning, må man så ikke bruge transactions? Jeg tror faktisk jeg har lavet en try-catch med transactions omkring en SELECT-sætning. Det er måske derfor den hænger.
Avatar billede jens_klinting Nybegynder
20. januar 2006 - 23:37 #5
Det er helt fint at have connection.Close() i en finally. Pointen er netop, at connectionen bliver lukket uanset om der forekommer en exception eller ej.

Angående transaktioner, så er det vigtigt at man får afsluttet transaktionen ligegyldigt om der kommer en exception eller ej. Noget i stil med nedenstående.

System.Data.IDbTransaction transaction = ....;
...
try
{
  // udfør noget sql...
  transaction.Commit();
}
catch
{
  transaction.Rollback();
  throw;
}
Avatar billede pfp Nybegynder
21. januar 2006 - 00:44 #6
Hej,

Jeg vil anbefale dig at læse Daniel Møller's letlæste gennemgang af Connection Pooling i ADO.NET - den giver et rigtigt godt indblik syntes jeg:
http://weblogs.dotnetforum.dk/frenz/archive/2005/10/27/68439.aspx

Fra ovenstående url er der også referencer til mere uddybende materiale, som for mange vil være interessant at læse.
Avatar billede carparknorth Nybegynder
18. september 2006 - 22:58 #7
Læg et svar :)
Avatar billede jens_klinting Nybegynder
19. september 2006 - 07:29 #8
svar
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