Avatar billede forceprogrammer Nybegynder
13. juli 2005 - 10:49 Der er 11 kommentarer

Problemer med at få lukket database connections

Jeg har store problemer med at få lukket min database connection efter jeg har ekskveret en SQL.
Jeg kan simpelthen ikke forstå hvorfor den ikke lukker forbindelserne til databasen efter brug.
Jeg gør følgende:

(Forestil jer at jeg kalder getNews fra et andet sted. Fx. har jeg en metode tilsvarende getnews som jeg kalder for hver række i en datatable. Efter jeg har loadet datatabellen er der 67 connections åbne til databasen (Der er 67 linier i datagriddet).

Og jeg fatter det simpelthen ikke da jeg lukker forbindelsen hver gang da jeg jo kalder
cmd.Connection.Close();


        public System.Data.DataTable getNews(string country)
        {
            System.Data.SqlClient.SqlCommand cmd=GetCommand("SELECT COUNT(*) FROM EN_TABEL",System.Data.CommandType.Text);
            cmd.Parameters.Add("@countrycode",country);
            return getAll(cmd);
        }


        private System.Data.SqlClient.SqlCommand GetCommand(string SQL,System.Data.CommandType cmdType){
            System.Data.SqlClient.SqlConnection con=new System.Data.SqlClient.SqlConnection(Global.connStr);
            con.Open();
            System.Data.SqlClient.SqlCommand cmd=new System.Data.SqlClient.SqlCommand(SQL,
                con);
            cmd.CommandType=cmdType;
            return cmd;
        }


        private object getOne(System.Data.SqlClient.SqlCommand cmd){
            object retval=cmd.ExecuteScalar();
            cmd.Connection.Close();
            return retval;
        }
Avatar billede arne_v Ekspert
13. juli 2005 - 13:16 #1
hvad gør getAll ?
Avatar billede arne_v Ekspert
13. juli 2005 - 13:16 #2
og hvordan kan du adde en parameter som ikke er der ?
Avatar billede forceprogrammer Nybegynder
13. juli 2005 - 13:20 #3
Ja, sorry. GetAll skulle være et kald til GetOne().

Lad mig lige omskrive geNews:

        public System.Data.DataTable getNews(string country)
        {
            System.Data.SqlClient.SqlCommand cmd=GetCommand("SELECT COUNT(*) FROM EN_TABEL WHERE landeKode=@countrycode",System.Data.CommandType.Text);
            cmd.Parameters.Add("@countrycode",country);
            return getOne(cmd);
        }
Avatar billede arne_v Ekspert
13. juli 2005 - 18:33 #4
hvis du viser siden 2 gange har du så stadig 67 åbne eller nu 134 åbne ?
Avatar billede bumle90 Nybegynder
14. juli 2005 - 10:33 #5
De hober sig op.
Når jeg har loadet siden 2 gange er der ikke flere connections.

Så dvs. efter 2 gange passer det meget godt med der er 134. Men connection pool størrelsen er kun på 100 connections...Så man skulle tro den ville kaste en exception midt i 2 load af siden...Men det gør den ikke. Først når jeg prøver at loade den 3. gang.
Avatar billede bumle90 Nybegynder
14. juli 2005 - 10:33 #6
Er det fordi det er den forkerte connection jeg lukker når jeg kalder
cmd.Connection.Close();
eller hvad?
Avatar billede arne_v Ekspert
14. juli 2005 - 10:36 #7
prøv evt.:

cmd.Connection.Close();
cmd.Connection.Dispose();
Avatar billede bumle90 Nybegynder
14. juli 2005 - 10:43 #8
Det har jeg prøvet..Det hjalp mig ikke
Avatar billede fcs Novice
14. juli 2005 - 13:05 #9
Bumle90 og forceprogrammer >> I bedes venligst forklare jeres indbyrdes forhold til hinanden hurtigst muligt.

Med venlig hilsen

FCS/Coadmin
Avatar billede bumle90 Nybegynder
14. juli 2005 - 15:47 #10
Vi er arbejdskollegaer
Avatar billede fcs Novice
14. juli 2005 - 17:36 #11
Ok. Vær dog opmærksom på at det vækker mistanke hos folk når det ser ud som om I er een og samme bruger. Derfor er det en god ide at det er den der opretter spørgsmålet der også fører det til ende.

God sommer.
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