none
insert into dentro de foreach RRS feed

  • Pregunta

  •  Hola a todos...

    Estoy haciendo un "insert into" dentro de un foreach, este foreach lo uso para detectar la seleccion de un checkbox dentro de GridView:

       foreach (GridViewRow fila in GridView2.Rows)
                {
                    CheckBox inserta = fila.FindControl("inserta") as CheckBox;
    
    
                    if (inserta.Checked == true)
                    {
                        cone.Close();
                        cone.Open();
    
                        MySqlCommand cn = new MySqlCommand("insert into bdtours.permisos (UsuariofkUsuarios, FormatofkCFormatos, Accion, Activo, FechaHoraR, UsuariofkUsuariosA) values ((select max(idusuario) from bdtours.usuarios), (select max(idcformato) from bdtours.cformatos), '" + fila + "', ('si'), (select now()), (select max(IdUsuario) from bdtours.usuarios));", cone);
    
                        cn.ExecuteNonQuery();
    
                        cone.Close();
                        string script = @"<script type='text/javascript'> alert('Registro Exitoso'); </script>";
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
    Pero al insertar los registros en la tabla, me guarda algo asi (System.Web.UI.WebControls.GridViewRow)

    Por favor, ¿alguien tiene alguna idea de porque me ocurre esto, y cómo solucionarlo?... he hecho varios intentos y búsquedas pero no doy con la solución.

    jueves, 15 de marzo de 2018 16:19

Respuestas

  • La construcción de su SQL es incorrecta.  No puede hacer + fila y esperar que le va a crear SQL bonito y correcto con los valores de cada celda.

    Aprenda a realizar consultas parametrizadas para que no concatene texto.  Luego dentro del bucle FOREACH debe ubicar cada control dentro de cada template de celda y obtener el valor que quiere (o bien usar el Value de la celda si es una celda tipo BoundField), y usar dichos valores como los valores de los parámetros de la consulta.

    No programo en MySQL así que no le puedo ayudar al 100% en esta área.  Sin embargo estoy 100% seguro que encontrará acerca de consultas parametrizadas en muchas partes.


    Jose R. MCP
    Code Samples

    jueves, 15 de marzo de 2018 16:58
    Moderador
  • hola

    pero no puedes asignar "fila" directo en el INSERT, tienes que tomar los campos de cada columna

    Insertar Datos De Un GridView C# A Sql Server 2008

    como se explica en el link

    veras que debes usar parametros en el codigo, eso de poner todo en una linea es horrible he inmantenible

    string query = @"insert into bdtours.permisos (UsuariofkUsuarios, FormatofkCFormatos, Accion, Activo, FechaHoraR, UsuariofkUsuariosA) 
    				values ((select max(idusuario) from bdtours.usuarios), 
    						(select max(idcformato) from bdtours.cformatos), 
    						?accion,
    						('si'), 
    						(select now()), 
    						(select max(IdUsuario) from bdtours.usuarios));"
    	
    	
    MySqlCommand cn = new MySqlCommand(query, cone);
    cn.Parameters.AddWithValue("?accion", fila.Cells[0].Text);
    
    cn.ExecuteNonQuery();

    usa siemrpe parametros, no se unen en un string los valores

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 15 de marzo de 2018 17:10

Todas las respuestas

  • La construcción de su SQL es incorrecta.  No puede hacer + fila y esperar que le va a crear SQL bonito y correcto con los valores de cada celda.

    Aprenda a realizar consultas parametrizadas para que no concatene texto.  Luego dentro del bucle FOREACH debe ubicar cada control dentro de cada template de celda y obtener el valor que quiere (o bien usar el Value de la celda si es una celda tipo BoundField), y usar dichos valores como los valores de los parámetros de la consulta.

    No programo en MySQL así que no le puedo ayudar al 100% en esta área.  Sin embargo estoy 100% seguro que encontrará acerca de consultas parametrizadas en muchas partes.


    Jose R. MCP
    Code Samples

    jueves, 15 de marzo de 2018 16:58
    Moderador
  • hola

    pero no puedes asignar "fila" directo en el INSERT, tienes que tomar los campos de cada columna

    Insertar Datos De Un GridView C# A Sql Server 2008

    como se explica en el link

    veras que debes usar parametros en el codigo, eso de poner todo en una linea es horrible he inmantenible

    string query = @"insert into bdtours.permisos (UsuariofkUsuarios, FormatofkCFormatos, Accion, Activo, FechaHoraR, UsuariofkUsuariosA) 
    				values ((select max(idusuario) from bdtours.usuarios), 
    						(select max(idcformato) from bdtours.cformatos), 
    						?accion,
    						('si'), 
    						(select now()), 
    						(select max(IdUsuario) from bdtours.usuarios));"
    	
    	
    MySqlCommand cn = new MySqlCommand(query, cone);
    cn.Parameters.AddWithValue("?accion", fila.Cells[0].Text);
    
    cn.ExecuteNonQuery();

    usa siemrpe parametros, no se unen en un string los valores

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 15 de marzo de 2018 17:10