System.invalidOperationException

  • Thread starter Thread starter fanor
  • Start date Start date
F

fanor

I have 2 data adapters, 1 connection , and one data set. I use the same
connection for all this data adapters. I'm using an access database and
windows forms

when I change from one record to other on the table JOBS it triggers
one event. In this event, I have a code like



System.Windows.Forms.BindingManagerBase bc;

bc = this.BindingContext[this.ds1, "jobs"];



this.ds1.WorkEmp.Clear();

if (bc.Count>0)
{
System.Data.DataRow drv;

drv = this.ds1.jobs.Rows[bc.Position];
this.daWorkEmp.SelectCommand.Parameters["njob"].Value=Convert.ToInt16(drv["njob"]);
try
{
this.daWorkEmp.Fill(this.ds1.WorkEmp); // ERROR HAPPENS HERE
}
catch (Exception e3)
{
MessageBox.Show(e3.ToString());
return ;
}
}


I got this message


"System.invalidOperationException: there is already an open DataReader
associated with this connection which must closed first"



WorkEmp.SelectCommand is like

SELECT b.firstname, b.lastname, a.empid, a.njob, b.empid AS Expr1 FROM
WorkOn a INNER JOIN employee b ON a.empid = b.empid WHERE (a.njob = ?)


I'm missing something???

I use the same logic in other modules and it works.
I'm not using any DataReader!!!
i'm not opening or closing by code the connection!!




TIA
 
Hi,

Are you setting your DA.SelectCommand property from an existing Command
object which has a DataReader associated with it ? If yes, close the Reader
first.

Regards
Joyjit
 
I found out what is happening I have a da1.fill , this triggers the event
in which I have another da2.fill , so at that time the connection is opened.
So, the question is, do I have to use a different connection for each data
adapter??
if that is the case, transactions will be use only one table at any time,
which doesn't make sence!!
there must another way, please advice

Thanks

Joyjit Mukherjee said:
Hi,

Are you setting your DA.SelectCommand property from an existing Command
object which has a DataReader associated with it ? If yes, close the Reader
first.

Regards
Joyjit


fanor said:
I have 2 data adapters, 1 connection , and one data set. I use the same
connection for all this data adapters. I'm using an access database and
windows forms

when I change from one record to other on the table JOBS it triggers
one event. In this event, I have a code like



System.Windows.Forms.BindingManagerBase bc;

bc = this.BindingContext[this.ds1, "jobs"];



this.ds1.WorkEmp.Clear();

if (bc.Count>0)
{
System.Data.DataRow drv;

drv = this.ds1.jobs.Rows[bc.Position];
this.daWorkEmp.SelectCommand.Parameters["njob"].Value=Convert.ToInt16(drv["n
job"]);
try
{
this.daWorkEmp.Fill(this.ds1.WorkEmp); // ERROR HAPPENS HERE
}
catch (Exception e3)
{
MessageBox.Show(e3.ToString());
return ;
}
}


I got this message


"System.invalidOperationException: there is already an open DataReader
associated with this connection which must closed first"



WorkEmp.SelectCommand is like

SELECT b.firstname, b.lastname, a.empid, a.njob, b.empid AS Expr1 FROM
WorkOn a INNER JOIN employee b ON a.empid = b.empid WHERE (a.njob = ?)


I'm missing something???

I use the same logic in other modules and it works.
I'm not using any DataReader!!!
i'm not opening or closing by code the connection!!




TIA
 
Hi,

try trapping the FillError event of the DataAdapter like this:-
protected static void FillError(object sender, FillErrorEventArgs e)
{
if (e.Errors.GetType() == typeof(System.invalidOperationException))
{
e.Continue = true;
}
}

Regards
Joyjit

Fanor said:
I found out what is happening I have a da1.fill , this triggers the event
in which I have another da2.fill , so at that time the connection is opened.
So, the question is, do I have to use a different connection for each data
adapter??
if that is the case, transactions will be use only one table at any time,
which doesn't make sence!!
there must another way, please advice

Thanks

Joyjit Mukherjee said:
Hi,

Are you setting your DA.SelectCommand property from an existing Command
object which has a DataReader associated with it ? If yes, close the Reader
first.

Regards
Joyjit


fanor said:
I have 2 data adapters, 1 connection , and one data set. I use the same
connection for all this data adapters. I'm using an access database and
windows forms

when I change from one record to other on the table JOBS it triggers
one event. In this event, I have a code like



System.Windows.Forms.BindingManagerBase bc;

bc = this.BindingContext[this.ds1, "jobs"];



this.ds1.WorkEmp.Clear();

if (bc.Count>0)
{
System.Data.DataRow drv;

drv = this.ds1.jobs.Rows[bc.Position];
this.daWorkEmp.SelectCommand.Parameters["njob"].Value=Convert.ToInt16(drv["n
job"]);
try
{
this.daWorkEmp.Fill(this.ds1.WorkEmp); // ERROR HAPPENS HERE
}
catch (Exception e3)
{
MessageBox.Show(e3.ToString());
return ;
}
}


I got this message


"System.invalidOperationException: there is already an open DataReader
associated with this connection which must closed first"



WorkEmp.SelectCommand is like

SELECT b.firstname, b.lastname, a.empid, a.njob, b.empid AS Expr1 FROM
WorkOn a INNER JOIN employee b ON a.empid = b.empid WHERE (a.njob = ?)


I'm missing something???

I use the same logic in other modules and it works.
I'm not using any DataReader!!!
i'm not opening or closing by code the connection!!




TIA
 
Back
Top