Problema con SQLCommad

Tengo un problema tengo un sqlcommand donde hago una consulta a la base ded datos con un select
Después de eso tengo un sqldatareader con un while para que este dentro del ciclo mientras la consulta no termine
Pero mi problema es que dentro del while yo quiero hacer un insert con alguno de los datos obtenidos de la consulta.
Te adujunto el código
Library.SQL += " select datemov, " +
" kgmin, kgdelivery from consumedfeed " +
" where id_cage = '" + TabGraficoAn.SelectedTab.Text + "'" +
" and datemov between convert(datetime, '" + FirstDay + "', 102) and convert(datetime, '" + LastDay + "', 103) ";
SqlCommand SQL = new SqlCommand(Library.SQL, Library.Conn);
Library.SQL_Read = SQL.ExecuteReader();
while (Library.SQL_Read.Read())
{
Id_Racion = byte.Parse(((ImageComboBoxItem)CmbPortion.Properties.Items[CmbPortion.SelectedIndex]).Value.ToString());
Id_Cage = TabGraficoAn.SelectedTab.Text;
HoraIn = DateTime.Parse(Library.SQL_Read["datemov"].ToString());
HoraEnd = DateTime.Parse(Library.SQL_Read["datemov"].ToString());
dif = HoraEnd.Subtract(HoraIn);
Diferencia = string.Format("{0:hh:mm:ss}",dif.ToString());
DateReal = DateTime.Parse(Library.SQL_Read["datemov"].ToString());
Hora = DateReal.ToLongTimeString();
Fecha = DateTime.Parse(Library.SQL_Read["datemov"].ToString());
Fec = string.Format("{0:dd/mm/yyyy}", DateTime.Parse(Library.SQL_Read["datemov"].ToString()));
Kgmin=double.Parse (Library.SQL_Read["kgmin"].ToString());
KgDelivery = double.Parse(Library.SQL_Read["KgDelivery"].ToString());
Library.SQL = "insert into feedinganalysis(id_cage, fecha, id_racion, kgmin, hora, diferencia, kgdelivery, datereal) values(@id_cage,@fecha,@id_racion,@kgmin,@hora,@diferencia,@KgDelivery ,@DateReal)";
NewUpd = new SqlCommand(Library.SQL, Library.Conn);
NewUpd.Parameters.Add("@id_cage", SqlDbType.VarChar,50).Value = Id_Cage;
NewUpd.Parameters.Add("@fecha", SqlDbType.VarChar, 50).Value = Fec;
NewUpd.Parameters.Add("@id_racion", SqlDbType.TinyInt).Value = Id_Racion;
NewUpd.Parameters.Add("@kgmin", SqlDbType.Float).Value = Kgmin;
NewUpd.Parameters.Add("@hora", SqlDbType.VarChar,50).Value = Hora;
NewUpd.Parameters.Add("@diferencia", SqlDbType.VarChar, 50).Value = Diferencia;
NewUpd.Parameters.Add("@KgDelivery", SqlDbType.Float).Value = Math.Round(KgDelivery, 3);
NewUpd.Parameters.Add("@DateReal", SqlDbType.DateTime).Value = DateReal;
NewUpd.ExecuteNonQuery();
}
Library.SQL_Read.Close();

1 Respuesta

Respuesta
1
No entiendo tu pregunta
Si quieres hacer un insert necesitas chequear si la conexión esta cerrada de o ocrear otra conexión si puedes ser más especifico con la pregunta con gusto te ayudaría
Mira tengo hecha una consulta ala base de datos y con el ciclo while habro la consulta y lo mantengo dentro el ciclo mientras no se termine los registros consultados.
Y dentro del ciclo quiero hacer un insert a otra tabla según los datos obtenidos de la consulta.
Pero me sale un error de que ya tengo un sqlreader abierto.
Y ahí esta mi problema.
El problema es ese que ya tienes una consulta abierta si vas a leer los datos y después vas a barrerlos y vas hacer un insert te convendría usar un dataadpter en vez de un reader para que puedas cerrar la bd
La otra opción es crear una nueva instancia de la conexión solo asegurate de que tu manejador soporte n sessiones de cada usuario
Yo optaría por la primera opción

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas