Ik heb een probleem met een stukje code dat een query uitvoert. Het lijkt namelijk dat om de een of andere reden deze de connectie niet goed sluit, waardoor ik foutmeldingen krijg. Het typische eraan is dat dit ook meerdere verschillende foutmeldingen zijn, zie hieronder:
[code=C#]
public Object GetInfo()
{
Object blaat = null;
try
{
//Construct the command object with its parameters
SqlCommand cmd = new SqlCommand(//Query, dbConnectie);
cmd.CommandType = CommandType.Text;
//parameters;
//Open the connection if not already open (Somewhere in the code this connection is not closed)
//Tijdelijke test aangezien de eerste fout over deze regel ging
if (!(dbConnectie.State == dbConnectie.Open))
dbConnectie.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleResult);
//Check if object is null
if (reader != null)
{
//Check if any rows are returned
if (reader.HasRows)
{
//Get the record and create an object from it, save the data in the object
while (reader.Read())
{
// populatie variabelen object
}
}
//Close the object
reader.Close();
}
//Close connection
dbConnectie.Close();
}
catch (Exception ex)
{
//Log error
}
finally
{
if (dbConnectie.State == dbConnectie.Open)
{
//Close connection
dbConnectie.Close();
}
}
return blaat;
}
[/code=C#]
Toch triggeren de verschillende foutmeldingen op regels 17 en 23, wat logisch is. Probleem is nu dat de foutmeldingen random optreden, en niet echt terug te traceren zijn naar 1 proces of ander iets. In 99% van de tijd krijg ik nergens problemen, toch op sommige momenten krijg ik dit terug.
Ik dacht eerst dat het bovenliggende proces de connectie niet sluit voordat hij dit uitvoert, echter heb ik dat gefixt, toen gebeurde het wel minder vaak maar nog steeds.
Ik heb nog steeds het vermoeden dat er ergens iets mis gaat met het niet sluiten van de connectie in mijn andere code, alleen heb ik dat nog niet kunnen vinden.
Heeft iemand een ander idee wbt het optreden van deze foutmeldingen?
EDIT:
Dat die fout optreed tussen regel 18 en 34 kan niet aangezien ik dit dan in de error logging zou moeten terugzien.
En de connectie instantie die ik hier gebruik is een klasse variabele, die 3 functies bevat die deze connectie gebruiken. Deze andere 2 functies worden echter niet aangeroepen in dit proces, en deze handelen verder ook alles goed af.
Ik zat zelf overigens ook al te denken aan het aanmaken van een nieuw connectie object, echter creëert dit niet teveel performanceverlies?
- There is already an open DataReader associated with this Command which must be closed first
- ExecuteReader requires an open and available Connection. The connection's current state is closed.
- Invalid attempt to call HasRows when reader is closed
[code=C#]
public Object GetInfo()
{
Object blaat = null;
try
{
//Construct the command object with its parameters
SqlCommand cmd = new SqlCommand(//Query, dbConnectie);
cmd.CommandType = CommandType.Text;
//parameters;
//Open the connection if not already open (Somewhere in the code this connection is not closed)
//Tijdelijke test aangezien de eerste fout over deze regel ging
if (!(dbConnectie.State == dbConnectie.Open))
dbConnectie.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleResult);
//Check if object is null
if (reader != null)
{
//Check if any rows are returned
if (reader.HasRows)
{
//Get the record and create an object from it, save the data in the object
while (reader.Read())
{
// populatie variabelen object
}
}
//Close the object
reader.Close();
}
//Close connection
dbConnectie.Close();
}
catch (Exception ex)
{
//Log error
}
finally
{
if (dbConnectie.State == dbConnectie.Open)
{
//Close connection
dbConnectie.Close();
}
}
return blaat;
}
[/code=C#]
Toch triggeren de verschillende foutmeldingen op regels 17 en 23, wat logisch is. Probleem is nu dat de foutmeldingen random optreden, en niet echt terug te traceren zijn naar 1 proces of ander iets. In 99% van de tijd krijg ik nergens problemen, toch op sommige momenten krijg ik dit terug.
Ik dacht eerst dat het bovenliggende proces de connectie niet sluit voordat hij dit uitvoert, echter heb ik dat gefixt, toen gebeurde het wel minder vaak maar nog steeds.
Ik heb nog steeds het vermoeden dat er ergens iets mis gaat met het niet sluiten van de connectie in mijn andere code, alleen heb ik dat nog niet kunnen vinden.
Heeft iemand een ander idee wbt het optreden van deze foutmeldingen?
EDIT:
Dat die fout optreed tussen regel 18 en 34 kan niet aangezien ik dit dan in de error logging zou moeten terugzien.
En de connectie instantie die ik hier gebruik is een klasse variabele, die 3 functies bevat die deze connectie gebruiken. Deze andere 2 functies worden echter niet aangeroepen in dit proces, en deze handelen verder ook alles goed af.
Ik zat zelf overigens ook al te denken aan het aanmaken van een nieuw connectie object, echter creëert dit niet teveel performanceverlies?
[ Voor 64% gewijzigd door FoOnEeN op 05-11-2009 12:15 . Reden: Iets te vroeg op verstuur geramt ]