Avatar billede ameq Nybegynder
17. december 2004 - 09:08 Der er 9 kommentarer og
1 løsning

Hjælp til at få min database forbindelse lukket igen

Hej
Jeg har et problem med noget kode, være gang jeg bruger den kode for en importeret dll fil i min code binden så vil den ikke lukke forbildelse til min database, hvis jeg bruger den importeret dll fil i et console program virker det fint med et få lukket, og jeg har checket at hjemmeside projket for den nye dll så det kan ikke være det...
KODE:
        public ArrayList Hent_5_Nyeste_Hold()
        {
            ArrayList _hold_liste = new ArrayList();
            try
            {
               
                string _sql = "select top 5 * from hold as oste_mad order by HOLD_ID desc";
                SqlDataReader _rs = _db.SqlDataReader(_sql);
                while(_rs.Read())
                {
                    Hold_ _hold = new Hold_(Convert.ToInt32(_rs["hold_id"]),_rs["Navn"].ToString(),_rs["Billede"].ToString(),Convert.ToDateTime(_rs["Oprettelses_Dato"]),_rs["Hjemmeside"].ToString(),_rs["Email"].ToString(),Convert.ToBoolean(_rs["Aktiveret"]),_rs["Kort_Navn"].ToString(),Convert.ToInt32(_rs["spil_id"]));
                    _hold_liste.Add(_hold);
                    _hold = null;
                }
                _rs.Close();
                _rs = null;
                _db.Close();
                _db = null;
            }
            catch(Exception _fejl)
            {
                throw _fejl;
            }
            return _hold_liste;
        }

_db kommer fra en anden dll:
KODE:
public class DB
    {
        /// <summary>
        /// Strengen som man bruger til at connect til database med
        /// </summary>
        private SqlConnection _connect;
       
        /// <summary>
        /// Åbener databasen
        /// </summary>
        public DB()
        {
            //string _server = "localhost";
            string _server = "sqlserver";
            string _database = "Turnering";
            string _user_id = "player";
            string _password = "player";
           
            try
            {
                string strConn = "Server=" + _server + "; Database=" + _database + "; User ID=" + _user_id + "; Password=" + _password + "; Trusted_Connection=False";
                _connect = new SqlConnection(strConn);
            }
            catch
            {
                throw new Exception("Fejl i databasen forbindelsen");
            }
        }
       
        /// <summary>
        /// Bruges til Stored Procs, den lukker selv forbindelsen
        /// </summary>
        /// <param name="strSQL">SQL strengen</param>
        public void SqlCommand(string strSQL)
        {
            SqlCommand _SqlCommand = new SqlCommand(strSQL, this._connect);
            _SqlCommand.Connection.Open();
            _SqlCommand.ExecuteNonQuery();
            this.Close();
        }
       
        /// <summary>
        /// Brugs til at hente data ud som skal bruges i en DataAdapter
        /// </summary>
        /// <param name="strSQL">SQL strengen</param>
        /// <returns>SqlDataAdapter</returns>
        public SqlDataAdapter SqlDataAdapter(string strSQL)
        {
            SqlDataAdapter _SqlDataAdapter = new SqlDataAdapter(strSQL, this._connect);
            _connect.Open();
            return _SqlDataAdapter;
        }
       
        /// <summary>
        /// Brugs til at hente data ud som skal bruges i en DataReader
        /// </summary>
        /// <param name="strSQL">SQL strengen</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader SqlDataReader(string strSQL)
        {
            SqlDataReader _sqldatareader;
            SqlCommand _SqlCommand = new SqlCommand(strSQL, this._connect);
            _SqlCommand.Connection.Open();
            _sqldatareader = _SqlCommand.ExecuteReader();
            return _sqldatareader;
        }
       

        /// <summary>
        /// Lukker forbindelsen til databasen
        /// </summary>
        public void Close()
        {
            this._connect.Close();
        }

        /// <summary>
        /// Lukker forbindelsen til databasen
        /// </summary>
        ~DB()
        {
            this._connect.Close();
        }
    }


Håber det er forstå lidt =)
Avatar billede segato Nybegynder
17. december 2004 - 10:55 #1
Er det ikke fordi dit dll returnere en datareader som er knyttet til en connection. Den connection lukker ikke selv medmindre du fortæller din reader i konstruktoren at den skal lukke ved lukining af selve readeren. Dette kan du gøre på følgende måde.

SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

Et andet godt råd er prøv at kigge på Microsofts Data Appalication Block den er virkelig god at arbejde med da har taget højde for en hel masse ting og da den er super nem at arbejde med. Alt  du koder der og 100 gange mere har de kodet for dig.

Mvh.

Segato
Avatar billede ameq Nybegynder
17. december 2004 - 11:58 #2
The type or namespace name 'CommandBehavior' could not be found (are you missing a using directive or an assembly reference?)
Avatar billede ameq Nybegynder
17. december 2004 - 11:59 #3
jeg mangle lige system.data
Avatar billede segato Nybegynder
17. december 2004 - 12:00 #4
Så skal du bare inkludere det rigtige namespace.

using System.Data.Odbc;
using System.Data;
using System.Data.SqlClient;
Avatar billede ameq Nybegynder
17. december 2004 - 12:16 #5
odbc?
hvorfor?

og som det ser ud nu virker det stadig væk ikke
Avatar billede segato Nybegynder
17. december 2004 - 12:56 #6
hvad har du skrevet. Kan du ik paste koden. Det var bare de tre jeg brugte kunn eik huke hvor den kam fra. nu havde jeg noget odbc jeg brugte. Men paste lige koden ved jo ik præcis hvad du har gjort:D
Avatar billede segato Nybegynder
17. december 2004 - 12:57 #7
Dette er måden jeg har gjort det på!

SqlConnection con = new SqlConnection(connstr);           
            SqlCommand cmd = new SqlCommand(sql, con);
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);   
           
            return dr;
Avatar billede segato Nybegynder
17. december 2004 - 12:57 #8
Men husk du skal stadig lukke den reader der returneres men nu lukkes connecion også!
Avatar billede ameq Nybegynder
17. december 2004 - 20:04 #9
ja det ligger også min til dels...
og ja det går jeg..., men man må kigge på det på mandag =)
Avatar billede ameq Nybegynder
03. januar 2005 - 13:10 #10
hey igen, sorry jeg ikke lige har været så aktiv, men jeg har stadig væk et problem med min forbindelsen.

Kode:
        public System.Collections.ArrayList Hent_Top5_Nyeste_Afsluttede()
        {
            _con = new DB();
            string _sqlstring = "Exec sp_Turnering_Hent_Top5_Nyeste_Afsluttede";

            SqlDataReader _sqlreader;
            System.Collections.ArrayList _returnarr = new System.Collections.ArrayList();

            try
            {
                _sqlreader = _con.SqlDataReader(_sqlstring);
                while(_sqlreader.Read())
                {
                    _returnarr.Add(Hent(Convert.ToInt16(_sqlreader["Turnerings_Id"])));
                }
                _sqlreader.Close();
                _sqlreader = null;
                _con.Close();
            }
            catch(Exception fejl)
            {
                throw fejl;
            }
            finally
            {
            }

            return _returnarr;
        }
Og jeg kan så se at jeg har kaldt min store processer i min Sql server Enterprise Manager. Og selv om jeg lukker min hjemmeside ned blever den ståne der inde.

Hvorfor?
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