none
No puedo actualizar mi base de datos .. RRS feed

  • Pregunta

  • buenas noches comunidad . les queria pedir una ayuda ya que no pude actualizar mi base de datos acces .. siento que quizas estoy fallando en algo.

    public void modificacionEstudiante(Estudiante estu)
            {
                OleDbConnection conexion = new OleDbConnection(ConfigurationManager.ConnectionStrings["Conexion"].ToString());
                conexion.Open();
                //string insertar = "UPDATE estudiante SET apellido=@Ape  WHERE Id_estudiante=@Id";
                OleDbCommand cmd = new OleDbCommand("Update Estudiante Set apellido=@ape where nro_estudiante=@nro", conexion);
               //"Update Clientes Set Nombres='"& TxtNombres.Text &"', Apellidos='"& TxtApellidos.Text &"' where Id="& TxtId.Text &""
                //"update estudiante set [apellido]=@ape  WHERE [Id_estudiante]=@Id"
                cmd.Parameters.AddWithValue("@nro", estu.Id_estudiante1);
             //   cmd.Parameters.AddWithValue("@Nom", estu.Nombre);
                cmd.Parameters.AddWithValue("@ape",estu.Apellido.ToString());
              //  cmd.Parameters.AddWithValue("@Sex", estu.Sexo);
                //cmd.Parameters.AddWithValue("@CanTi", estu.Cantidad_titular);
                //cmd.Parameters.AddWithValue("@CanSe", estu.Cantidad_secundario);
                //cmd.Parameters.AddWithValue("@CanPri", estu.Cantidad_salaPrincipal);
                //cmd.Parameters.AddWithValue("@CanB", estu.Cantidad_salaB);
                //cmd.Parameters.AddWithValue("@Ul", estu.Ultima_leccion);
                
                 cmd.ExecuteNonQuery();
                //conexion.Close();
            }
        }

    lo mas loco es que le mando a actualizar y no me cambia los datos. por favor ayudenme....

    domingo, 17 de febrero de 2019 4:20

Todas las respuestas

  • Hola Facundo Abel:

    Cambia tú código por algo de este estilo

    public void modificacionEstudiante(Estudiante estu)
            {
                using (OleDbConnection conexion = new OleDbConnection(ConfigurationManager.ConnectionStrings["Conexion"].ToString()))
                {
                    OleDbCommand cmd = new OleDbCommand("Update Estudiante Set apellido=@ape where nro_estudiante=@nro", conexion);
                    try{
                        conexion.Open();
                        cmd.Parameters.AddWithValue("@nro", estu.Id_estudiante1);
                        cmd.Parameters.AddWithValue("@ape",estu.Apellido.ToString());
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                       // ver lo que ha ocurrido y al menos loguearlo en algún tipo de sistema, (archivo, etc) Además te sirve para saber exactamente lo que ha ocurrido en depuración
                    }
    
                }
            }

    Así no tienes que preocuparte de cerrar las conexiónes, y tienes un punto al que recurrir cuando ocurra un error, lo cual no quita para que luego puedas hacer en el catch un throw y sigas tratando los errores como lo estuvieses haciendo.

    Dado que no se sabe si el contenido que tiene Estu es null o lo que tiene y no pones ningún tipo de error, por tanto supongo que la sentencia update se realiza, te recomiendo que pongas un punto de interrupción, en código y verifiques que lo que contiene estu.Apellido es el valor a cambiar, y lo que tiene estu.id_estudiante1 coincide con un algún registro en tu base de datos.

    Depurar

    https://docs.microsoft.com/es-es/visualstudio/debugger/navigating-through-code-with-the-debugger?view=vs-2017

    domingo, 17 de febrero de 2019 6:37
  • Hola:
    Los parametros deben de ir en el mismo orden que en la sentencia

    Cambia
     cmd.Parameters.AddWithValue("@nro", estu.Id_estudiante1);
     cmd.Parameters.AddWithValue("@ape",estu.Apellido.ToString());
    Por
     cmd.Parameters.AddWithValue("@ape",estu.Apellido.ToString());
     cmd.Parameters.AddWithValue("@nro", estu.Id_estudiante1);

    Un saludo desde Bilbo
    Carlos

    domingo, 17 de febrero de 2019 7:47
  • Hola

    Adicionalmente a la nota de J. Carlos herrero, y repasando la doc. oficial de OleDbCommand se menciona lo siguiente.

    <q>Comentarios El proveedor OLE DB .NET no admite parámetros con nombre para pasar parámetros a una instrucción SQL o un procedimiento almacenado llamado por un OleDbCommand cuando CommandType está establecido en Text. En este caso, se debe usar el marcador de posición de signo de interrogación (?). </q>

    Por tanto tu sentencia puede ser:

    Update Estudiante Set apellido=? where nro_estudiante=?

    quedando los parámetros por posición, como te han indicado.

    OleDbCommand

    https://docs.microsoft.com/es-es/dotnet/api/system.data.oledb.oledbcommand.parameters?view=netframework-4.7.2

    domingo, 17 de febrero de 2019 8:45