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?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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.
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....
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
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
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
'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
Synes godt om
Ny brugerNybegynder
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.