Foros del Web » Programación para mayores de 30 ;) » .NET »

Insertar Datos obtenidos desde un DataReader

Estas en el tema de Insertar Datos obtenidos desde un DataReader en el foro de .NET en Foros del Web. THola amigos del Foro tengo el siguiente problema para poder insertar datos estoy , el codigo es el siguiente : sql ="select cod_tramite, categoria, ORC, ...
  #1 (permalink)  
Antiguo 05/10/2005, 15:38
 
Fecha de Ingreso: julio-2002
Ubicación: Potosí-Bolivia
Mensajes: 215
Antigüedad: 21 años, 9 meses
Puntos: 0
Insertar Datos obtenidos desde un DataReader

THola amigos del Foro tengo el siguiente problema para poder insertar datos estoy , el codigo es el siguiente :

sql ="select cod_tramite, categoria, ORC, Num_Libro, Partida, Folio, Fecha_ins,Nombres_ins, ApPat_ins, ApMat_ins, Depto, Prov, Localidad from tramites_TEMP Where cod_Tramite='"+ dgrTramites.Items[i].Cells[2].Text +"' group by cod_tramite, categoria, ORC, Num_Libro, Partida, Folio, Fecha_ins,Nombres_ins, ApPat_ins, ApMat_ins, Depto, Prov, Localidad";
SqlCommand cmdLib = new SqlCommand(sql, conexion);
SqlDataReader dr = cmdLib.ExecuteReader();

while(dr.Read())
{
Label1.Text = Convert.ToString(dr["cod_tramite"]);

drop.Items.Add(Convert.ToString(dr["cod_tramite"]));
sql = "insert into tbl_Libro0(cod_tramite)Values(@cod_tramite)";
SqlCommand cmdInsert = new SqlCommand(sql, conexion);

cmdInsert.Parameters.Add("@cod_tramite", SqlDbType.Char, 10);
cmdInsert.Parameters["@cod_tramite"].Value = Convert.ToString(dr["cod_tramite"]);
cmdInsert.ExecuteNonQuery();
conexion.Close();

}
dr.Close();


ahora no se me sale el siguiente error,

"There is already an open DataReader associated with this Connection which must be closed first"


no se como debo hacerlo estoy con esto dos dias , será que laguien me da una mano...Gracias de antemando.
__________________
Rodeate de buenos y tu lo pareceras..rodeate de genios y algo en ti se quedará...
  #2 (permalink)  
Antiguo 05/10/2005, 18:09
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
try
{
myCommand.Connection.Open();
System.Data.SqlClient.SqlDataReader myDR = myCommand.ExecuteReader();
myDR.Close();
int res = Convert.ToInt32(myCommand.Parameters["@res"].Value);
}
catch(System.Exception Ex)
{
Exceptionmessage =Ex.Message.ToString();//MENSAJE
}
finally
{
myCommand.Connection.Close();
myCommand.Dispose();
myConnection.Dispose();
}
  #3 (permalink)  
Antiguo 06/10/2005, 00:25
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 6 meses
Puntos: 8
Para insertar cuando estás leyendo, deberás utilizar otra conexión distinta, puesto que esta ya está ocupada leyendo, otra cosa que puedes hacer (si no quieres abrir más conexiones) es primero meter los datos en un DataTable y despues insertar desde ahí.
  #4 (permalink)  
Antiguo 06/10/2005, 06:57
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
puedes poner el query de select e insert en una sola cadena y solo realizar una ejecucion

INSERT INTO tabla2
SELECT campo1,Campo2,... FROM tabla1 WHERE condicion

La CANTIDAD de columnas del SELECT deben de coincidir con las columnas de la tabla del INSERT

" INSERT INTO tbl_Libro0 SELECT [cod_tramite] FROM...WHERE..."

suponiendo que la tabla tbl_Libro0 solo pudiera tener la columna [cod_tramite] (y talvez un campo identity )

si tuviera mas columnas pudieras agregar valores por default, tantos como la cantidad de columnas tenga la tabla2

" INSERT INTO tbl_Libro0 SELECT [cod_tramite],0,0,0 FROM...WHERE..."

espero te haya dado otra idea para resolver tu problema

saludos
  #5 (permalink)  
Antiguo 06/10/2005, 16:07
 
Fecha de Ingreso: julio-2002
Ubicación: Potosí-Bolivia
Mensajes: 215
Antigüedad: 21 años, 9 meses
Puntos: 0
Hola muchachos, pues SIIII, tuve que abrir y cerrar otras conexiones para cada Insert jiji, pero me funciono muuuuuuuuuchas gracias a ambos
eso de las conexiones fue un dolor de cabeza , pero YA esta listo.

Saludos y gracias gracias nuevamente
__________________
Rodeate de buenos y tu lo pareceras..rodeate de genios y algo en ti se quedará...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:04.