Solution - There is already an open DataReader associated with this Command which must be closed first.
OleDB Error
There is already an open DataReader associated with this Command which must be closed first.
![]() |
OleDB Error : There is already an open DataReader associated with this Command |
Problem
- There is already an open DataReader associated with this Command which must be closed
first.
Cause
-
Having more than 1 dataReader result set working at the same time .
Solution
In my solution example, I work with Sql Server 2000 and VB.Net 2005The VB. Net Example Project can be downloaded at the end of this post
It contains (Sql Server 2000 DataBase - VB.Net Project)
The example shows how to :
- Navigate (First Record - Next Record) using ADO Net 2.0 Online-Mode using SqlClient DataReader ...
- Sql Database Name : Market
- Sql Database Table : Market.Info
- Server Name : evry1falls
- (in order to see the example correctly, you'll have to Import the Database 'Market' into your sql server 2000 Enterprise Manager)
- Photo1 : Application Final Design
|
VB .net SqlServer project |
Photo2 : Table Structure
|
vb .net sql server 2000 Table |
|
vb .net sql server 2000 Source Code |
Photo4 : Codes
|
vb .net sql server source code |
Photo5 : Codes
|
vb .net sql server source code |
Now, if you run the project and tried to navigate using (First) or (Next) you will get the Exception :
There is already an open DataReader associated with this Command which must be closed first .....
So, the solution would be :
Trap the Exception that shows in the (SelectedIndexChanged) Event of the (ComboBox) like this :
And the same for the (Next) Button ..
Now you can Navigate and search using ComboBox Control safely without exceptions ..
Note
- Source code will give you exception and you will have to re-write the solution by yourself as shown above .
- The Folder (Bin/Debug) Includes (Back-Up) use it to restore the (Market Database) in your Sql Server 2000
- Use the namespace (evry1falls) as new server Registration .
Download Source Code :
MediaFire Link
Using MS Access 2003/2007/2010
In case of using Microsoft Access Database, OleDb.OleDbDataReader with OleDb.OleDbCommand.
The work around or the solution would be :
Always create a new Instance of the OleDbCommand, I.e
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'VB 2010 | |
'Source : http://adonetaccess2003.blogspot.com/2011/12/solution-there-is-already-open.html | |
Dim Cpur1 As New OleDb.OleDbCommand | |
sqlStr = Trim("") | |
sqlStr = "Select * from Purchase" | |
With Cpur1 | |
.Connection = CN | |
.CommandType = CommandType.Text | |
.CommandText = sqlStr | |
End With | |
RD = Cpur1.ExecuteReader() | |
'Repeat this block after changing the Cpur1 to something else to avoid getting the Error | |
'There is already an open DataReader associated with this Command which must be closed first. |