Update SQL Server por medio de Visual Studio ASP.NET web forms

publicado por: Anonymous

Estoy intentando hacer un update en una DB, pero no me esta realizando los cambios dicho comando. Cuando lo hago en la query directo de SQL server si funciona, pero cuando lo hago desde mi aplicación no hace el update.

Esta es la query en SQL Server:

update cliente set telefono = '864346', cedula = '8826537',
nombre = 'Lucho', direccion = 'Cll 60 # 15 - 45'
where cedula = '123456789' 
and nombre = 'Luis Ocampo'
and telefono = '3116085275'
and direccion = 'sddferr';

Esta es el código desde Visual Studio:

string s = System.Configuration.ConfigurationManager.ConnectionStrings["cadenaconexion1"].ConnectionString;
            SqlConnection conexion = new SqlConnection(s);
            conexion.Open();
            SqlCommand comando = new SqlCommand("update cliente set " + 
                                 "cedula = '" + ccliente.Text + "', nombre = '" +
                                 ncliente.Text + "', telefono = '" + ctelefono.Text +
                                 "', direccion = '" + cdireccion.Text + "' where cedula = '" + 
                                 ccliente.Text + "' and nombre = '" +
                                 ncliente.Text + "' and telefono = '" + 
                                 ctelefono.Text + "' and direccion = '" + 
                                 cdireccion.Text + "'", conexion);

            ccliente.Text = string.Empty;
            ncliente.Text = string.Empty;
            ctelefono.Text = string.Empty;
            cdireccion.Text = string.Empty;

            msgerror.Text = "Información actualizada con exito";

            conexion.Close();

No se si estaré comiendome algo, o si entendí mal el proceso que se tiene que hacer con los Texbox para actualizar la info.

Quedo atento, por favor, ojala puedan ayudarme. Gracias.

solución

El problema principal es que estás asignando query al comando, pero no lo envías nunca al motor de base de datos. En otras palabras no ejecutas el comando.

Para enviar el UPDATE, ejecuta el método ExecuteNonQuery, por ejemplo:

comando.ExecuteNonQuery();

Una vez aclarado esto. Me voy a tomar el atrevimiento de dejarte algunos consejos. Pueden haber otros modos de hacerlo que difieran del mio. Queda en vos investigar cual es el mas adecuado y se acomoda a tu proyecto.

  • Al hacer un UPDATE de un registro SIEMPRE lo debes hacer por el ID
    que le corresponde. Nunca utilizando los valores actuales como
    condiciones.

  • Estas usando para el WHERE los mismo valores que quieres asignar.
    Aquí mas que un consejo, remarco un error.

  • Debes evitar usar la concatenación en las consultas ya que te pueden
    ocasionar muchos inconvenientes. Para eso puedes utilizar por
    ejemplo SqlParameterCollection.
    En este caso no estas trabajando con fechas ni datos complejos, pero
    en un futuro se te hará indispensable. Aparte de que te expones a
    inyección de
    SQL
    . Existen
    otros métodos, puedes investigar cual se adapta mejor a tu uso.

  • Siempre hacer las consultas dentro de un Using. Algo así:

using (SqlConnection connection = new SqlConnection(
  "Integrated Security=SSPI;Initial Catalog=Northwind"))
{
    connection.Open();      
    // Pool A is created.
}

¿Por qué usar ” using” en el código?

En C # hay algunos objetos que utilizan los recursos del sistema. Los cuales deben eliminarse, cerrarse, vaciarse y desecharse, etc. En C # puede escribir el código para Crear una nueva instancia en el recurso, usarlo, cerrarlo, vaciarlo, desecharlo. O, por otro lado, simplemente puede usar este usingbloque de declaración en el que el objeto creado se cierra, se vacía y se desecha y los recursos pueden ser utilizados de nuevo por otros procesos. Esto asegura que el marco tomará las mejores medidas para cada proceso.

  • Agregar un
    try-catch
    para manejar la excepciones.
  • Evitar colocar nombres demasiados abstractos a las variables y los
    elementos. Por ejemplo reemplazar ‘ccliente’ por ‘clienteCedula’ o
    ‘cedulaCliente’ etc..
  • Respetar la tabulacion en el código. Es muy importante tratar de
    mantener un código limpio y claro. De este modo te resultara mas
    fácil encontrar los errores y entender códigos mas complejos
    rápidamente.
  • Yo acostumbro usar ExecuteNonQuery() devuelve solo el número de
    filas afectadas por una inserción, actualización o eliminación.
    Puedes utilizarlo para saber si se realizó la actualización
    correctamente.

Te dejo el código respetando tus condiciones en la consulta, pero realizando algunas otras mejoras como las mencionadas.
Debes reemplazar los valores asignados a los parámetros para las condiciones. Yo no sabia de donde los sacabas, ya que estabas usando los mismo que asignabas.

using (SqlConnection conexion = new SqlConnection(
  ConfigurationManager.ConnectionStrings["cadenaconexion1"].ConnectionString))
{
    try
    {
        conexion.Open();      

        cmd.CommandType = System.Data.CommandType.Text;
        cmd.Connection = conexion;
        cmd.CommandText = "update cliente set telefono = @telefono, cedula = @cedula, nombre = @nombre, direccion = @direccion where cedula =  @cedulaWhere and nombre = @nombreWhere and telefono = @telefonoWhere and direccion = @direccionWhere";

        //Vamos a agregar los valores como parámetros para evitar la concatenación en la consulta.
        //Valores con los que se van a actualizar los campos
        cmd.Parameters.AddWithValue("@cedula",ccliente.text);
        cmd.Parameters.AddWithValue("@nombre", ncliente.text);
        cmd.Parameters.AddWithValue("@telefono", ctelefono.text);
        cmd.Parameters.AddWithValue("@direccion", cdireccion.text)
        //Valores para las condiciones.
        cmd.Parameters.AddWithValue("@cedulaWhere",'123456789');
        cmd.Parameters.AddWithValue("@nombreWhere", 'Luis Ocampo');
        cmd.Parameters.AddWithValue("@telefonoWhere", '3116085275');
        cmd.Parameters.AddWithValue("@direccionWhere", 'sddferr');

        int result = cmd.ExecuteNonQuery();
        // Ahora en result tenemos la cantidad de filas afectadas. 
       // En base a eso podemos determinar si hubo exito al realizar la actualizacion. En ese caso deberia ser > 0 por ej.

    }
    catch(Exception ex)
    { 
        // aquí puedes manejar las excepciones. Mostrarlas al usuario o lo que desees.
    }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *