---
title: "...already an open DataReader associated with this Connection which must be closed..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/104241-already-an-open-datareader-associated-with-this-connection-which-must-be-closed"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "greggan"
published: "2004-05-24T15:23:32.000Z"
updated: "2004-05-24T20:08:17.000Z"
replies: 3
views: 340
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/104241-already-an-open-datareader-associated-with-this-connection-which-must-be-closed"
---

# ...already an open DataReader associated with this Connection which must be closed...

## #1 — greggan, 2004-05-24T15:23Z

```
<%@ Page Language="VB" debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Oledb" %>
<script runat="server">
sub skapa_click(obj as object, e as eventargs)
Dim cn as new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\Inetpub\databaser\onska.mdb;")
Dim cmd as new OleDbCommand("select * from anv WHERE nick='" + nick.Text + "'" ,cn)
Dim dr as OledbDataReader
cn.Open()
dr = cmd.ExecuteReader()
if (dr.read()) Then
label1.text = "Användarnamnet du valde finns redan."
dr.close()
else
Dim cmd2 as new OleDbCommand("INSERT INTO anv(nick,pass) VALUES('" & nick.Text & "','" & pass.Text & "') ",cn)
Cmd2.ExecuteNonQuery()
cn.Close
end if
end sub
</script>
<html>
<head>
<title>Registrera</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form runat="server">
Användarnamn<br/>
<asp:textbox id="nick" runat="server"/><br/>
Lösenord<br/>
<asp:textbox id="pass" runat="server"/><br/>
Ange Lösenordet igen<br/>
<asp:textbox id="passagain" runat="server"/><br/>
<asp:button id="skapa" OnClick="skapa_click" Text="Registrera" runat="server"/><br/>
<asp:label id="label1" runat="server"/>

</form>

</body>
</html>
```

Jag försöker lägga in användarnamn och lösenord i databasen. Först vill jag dock kolla upp så att inte samma användarnamn redan finns.

Jag kollar då först upp om användaren finns med hjälp av read().
Om användaren inte finns ska värdena läggas till, men då får jag ett felmeddelande som säger att det redan är en datareader öppen till den här databasanslutningen. Men jag har ju lagt till kommandot dr.close() vilket ska se till att datareadern stängs.... eller?

någon som kan se vad som är fel? :q

(jag vet att jag måste kolla upp att man skriver samma lösenord också, jag ska fixa det senare med valdation)

Permalänk: https://www.webforum.nu/p/104241

## #2 — Dino, 2004-05-24T17:45Z

```
Dim dr as OledbDataReader
try
   cn.Open()
   dr = cmd.ExecuteReader()
   if(dr.HasRows) then
      dr.close()
      label1.text = "Användarnamnet du valde finns redan."   
   else
      dr.close()
      Dim cmd2 as new OleDbCommand("INSERT INTO anv(nick,pass) VALUES('" & nick.Text & "','" & pass.Text & "') ",cn)
      Cmd2.ExecuteNonQuery()
   end if
catch
   'throw
finally
   cn.Close()
end try
```

Permalänk: https://www.webforum.nu/p/1353267

## #3 — greggan, 2004-05-24T18:11Z

Tackar så mycket, jag har aldrig lärt mig "try". Fattar dock inte varför det inte fungerade på mitt sätt. :/

Permalänk: https://www.webforum.nu/p/1353288

## #4 — Dino, 2004-05-24T20:08Z

Ditt sätt fungerar inte pga din if sats. Om din if-sats är true(datareadern har data) så stänger du datareadern, men om den inte har data så stänger du den inte i **else** satsen. Samma sak med ditt connection obekt. Det stängs bara när if-satsen är false(datareadern har inte data).

```
if (dr.read()) Then
   label1.text = "Användarnamnet du valde finns redan."
   [b]'dr stängs, men inte cn[/b]
   dr.close()
else
   Dim cmd2 as new OleDbCommand("INSERT INTO anv(nick,pass) VALUES('" & nick.Text & "','" & pass.Text & "') ",cn)
   Cmd2.ExecuteNonQuery()
   [b]'cn stängs, men inte dr[/b]
   cn.Close
end if
```

Permalänk: https://www.webforum.nu/p/1353357

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/104241-already-an-open-datareader-associated-with-this-connection-which-must-be-closed
