SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: Dieguinho. en Miércoles 25 de Julio de 2007, 20:58

Título: Error Al Insertar En Una Bd
Publicado por: Dieguinho. en Miércoles 25 de Julio de 2007, 20:58
Buenas, tengo el siguiente problema.

Tengo esta funcion para realizar updates, insert o delete a una base de datos.

Código: Text
  1.  
  2.         public int EjecutarNonQuery(string sQuery, SqlConnection cnConexionSQL)
  3.         {
  4.             //Ejecuta una transaccion. (insert,update,delete)
  5.  
  6.             int iResultado;
  7.             SqlCommand cmSQL = new SqlCommand(sQuery, cnConexionSQL);
  8.  
  9.             iResultado = cmSQL.ExecuteNonQuery();
  10.             return iResultado;              
  11.         }
  12.  
  13.  


Los parametros son la sentencia que quiero ejecutar (en este caso era un INSERT) y la conexion que vengo usando.
Cuando la utilizo me sale el siguiente error:
"There is already an open DataReader associated with this Command which must be closed first."

En la aplicacion yo ya tengo un datareader abierto, pero no entiendo porque tengo que cerrarlo si en mi funcion no uso ningun
datareader.

Si o si tengo que cerrar el datareader?
Si me pueden despejar la duda se los agradezco.

saludos.
Título: Re: Error Al Insertar En Una Bd
Publicado por: Neopro en Miércoles 25 de Julio de 2007, 21:28
Para realizar una consulta debes abrir la conexión el alguna parte.

Código: Text
  1. cnConexionSQL.Open();
  2.  

Luego para volver a ejecutar otra conexion debes cerrar la anterior.

Código: Text
  1. cnConexionSQL.Close();
  2.  

Quiza abres conexiones cada vez que realizas una consulta.
Título: Re: Error Al Insertar En Una Bd
Publicado por: Dieguinho. en Miércoles 25 de Julio de 2007, 22:02
claro, yo la conexion la abro al iniciar la aplicacion y el SqlConnection que me devuelve lo uso durante todo el programa.

pero el problema creo que viene por el lado de un datareader que estoy utilizando.
recien para probar lo cerre y me hizo el insert de manera correcta.

pense que el executenonquery no tenia nada que ver con el datareader.
Título: Re: Error Al Insertar En Una Bd
Publicado por: Neopro en Miércoles 25 de Julio de 2007, 22:26
Te recomiendo cerrar la conexion despues de cada ExecuteNonQuery, y abrirla antes de utilizarlo.
Título: Re: Error Al Insertar En Una Bd
Publicado por: Dieguinho. en Jueves 26 de Julio de 2007, 13:54
si?, gracias, lo empezare a aplicar.

saludos.
Título: Re: Error Al Insertar En Una Bd
Publicado por: x_reaccion en Viernes 27 de Julio de 2007, 02:37
Hola

Si realmente llegas a necesitar tener mas de un datareader abierto creo que poniendo esto en tu conección puedes abrir mas de uno.


Código: Text
  1.  
  2. MultipleActiveResultSets=True
  3.  
  4.  

Ejemplo :

Código: Text
  1.  
  2. SqlConnection _ConnectionTo = new SqlConnection("Data Source=localhost\\instance; Initial Catalog=database; User Id=fuser; Password=fpassword; MultipleActiveResultSets=True");
  3.  
  4.  
Título: Re: Error Al Insertar En Una Bd
Publicado por: tragokorto01 en Lunes 8 de Marzo de 2010, 23:54
"MultipleActiveResultSets=True"

muy buen dato, no sabia eso, has dado en el clavo  :good:

gracias,

pd: solo me registre para agradecer, ya se que es un post muy pasado.
Título: Re: Error Al Insertar En Una Bd
Publicado por: berkut2009 en Martes 9 de Marzo de 2010, 20:15
Si estas ejecutando un DataReader antes de ejecutar esa consulta, cerralo.
miReader.Close();
 :)