Avatar billede shadowdance Nybegynder
02. januar 2006 - 07:40 Der er 7 kommentarer

DB Connection fejler

Jeg har lavet en DBConnection class der skal holde liv i min database. Den instanseres ved kald til en side. Problemet er, at når den har kørt normalt i et stykke tid, producerer den pludselig en OleDbConnection 'ukendt fejl', hvorefter den ikke vil fungere i et stykke tid. Herefter bliver den normal igen og kører videre... hvad kan det skyldes?
Avatar billede snepnet Nybegynder
02. januar 2006 - 07:58 #1
skal ikke kunne sige hvad fejlen er, men umiddelbart lyder det som om sørger for at holde en forbindelse åben, istedet for blot at bruge den når det er nødvendigt.... det bør du ikke gøre.

sørg for at luk forbindelsen op når du skal bruge den, og luk den så hurtigt som muligt igen.

mvh
Avatar billede arne_v Ekspert
02. januar 2006 - 11:14 #2
Hvilken database ? Hvordan ser koden ud (skitseret) ?
Avatar billede arne_v Ekspert
02. januar 2006 - 11:15 #3
Generelt er OLE DB og ODBC mindre godt i .NET
Avatar billede shadowdance Nybegynder
04. januar 2006 - 10:42 #4
Nå, jeg kom til bunds i det, og du havde ganske ret, Snepnet: problemet blev først løst, da jeg sørgede for manuelt at lukke forbindelsen alle steder, hvor den blev åbnet. Og det får mig til at konkludere det samme som dig, Arne_v: i gamle dage med ASP 3 var der ikke noget problem med at lade forbindelsen dø på naturlig vis. Det irriterer mig også lidt at man kun kan have én åben datareader på en levende forbindelse. Det forstyrrer temmelig meget brugen af rekursive funktioner, fordi man så er nødt til at tømme datareaderen før man kan tillade sig at kalde funktionen igen....
Avatar billede arne_v Ekspert
04. januar 2006 - 10:53 #5
der er kun 2 muligheder: enten kan man kun have en åben datareader for en
connection eller så skal hele query output caches with execute - det sidste
er ikke særligt professionelt
Avatar billede snepnet Nybegynder
04. januar 2006 - 12:14 #6
hvis du bruger version 2.0 og sql-server 2005 kan det godt lade sig gøre at have flere readers på samme connection.
du kan se et eksempel på det her:
http://www.utmag.com/wconnect/wc.dll?LevelExtreme~9,7,10,805
mvh
Avatar billede shadowdance Nybegynder
04. januar 2006 - 16:51 #7
arne_v: men i tilfældet, hvor en rekursiv funktion skal bruge databaseopslag, kan det være umuligt at undgå caching - eller ihvertfald blive ufattelig klodset. Jeg sad og rodede med en funktion, der skulle bygge et menutræ. For hver af menupunkterne skulle den tjekke, om det pågældende punkt havde "børn". Jeg havde temmelig svært ved at se et alternativ til denne opbygning:

        Private Sub buildLevel(ByVal parentnode As MenuNode)

            Dim db As DBConnection = New DBConnection(env.getParameter("dbpath"))

            Dim articleid As New ArrayList
            Dim title As New ArrayList
            Dim shortinfo As New ArrayList

            Dim sql As String = ""
            sql += "SELECT articleid,title,shortinfo "
            sql += "FROM article "
            sql += "WHERE websiteid = " & mywebsiteid & " AND parentid = " & parentnode.articleid & " "
            sql += "ORDER BY sortorder ASC,revisiontime DESC"

            rs = db.ExecuteQuery(sql)

            'Empty RS into arraylists
            If rs.HasRows Then
                Do While rs.Read
                    articleid.Add(rs.GetInt32(0))
                    HttpContext.Current.Trace.Write(rs.GetInt32(0))
                    title.Add(rs.GetString(1))
                    shortinfo.Add(rs.GetString(2))
                Loop
                rs.Close()
            Else
                rs.Close()
                db.Close()
                Return
            End If

            db.Close()

            Dim newnode As MenuNode = Nothing

            'Run through arraylists and create nodes
            For i As Integer = 0 To articleid.Count - 1
                newnode = New MenuNode(articleid(i), title(i), shortinfo(i))
                newnode.parent = parentnode

                'If there is a parent, add this child
                If Not parentnode Is Nothing Then
                    parentnode.child(0) = newnode
                End If

                buildLevel(newnode)
            Next

        End Sub
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