83 - SqlCommand (update): Modificar registro


Vimos hasta ahora el alta (carga), consulta (búsqueda) y baja (borrado). Ahora veremos como modificar datos de una fila de la tabla.

Para modificar datos debemos utilizar el comando SQL update.

Problema

Implementar una aplicación que permita consultar un artículo por su código. Luego mostrar en dos TextBox la descripción y el precio actual. Permitir modificar la descripción y precio dejando registrado dicho cambio en la tabla de la base de datos al presionar un botón.

Crear un proyecto llamado: PruebaBaseDatos6 y definir la siguiente interfaz visual:

3 objeto de la clase Label.
2 objeto de la clase Button (disponer la propiedad Enabled del 
                             botón de modificación en false para que empiece desactivo)
3 objeto de la clase TextBox. 
comando update SqlCommand SQL Server

El código fuente para resolver la consulta y modificación es:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Data.SqlClient;

namespace PruebaBaseDatos6
{
    public partial class Form1 : Form
    {
        private SqlConnection conexion = new SqlConnection("server=DIEGO-PC\\SQLEXPRESS ; database=base1 ; integrated security = true");

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            conexion.Open();
            string cod = textBox1.Text;
            string cadena = "select descripcion, precio from articulos where codigo=" + cod;
            SqlCommand comando = new SqlCommand(cadena, conexion);
            SqlDataReader registro = comando.ExecuteReader();
            if (registro.Read())
            {
                textBox2.Text = registro["descripcion"].ToString();
                textBox3.Text = registro["precio"].ToString();
                button2.Enabled = true;
            }
            else
                MessageBox.Show("No existe un artículo con el código ingresado");
            conexion.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            conexion.Open();
            string cod = textBox1.Text;
            string descri = textBox2.Text;
            string precio = textBox3.Text;
            string cadena = "update articulos set descripcion='"+descri+"', precio="+precio+" where codigo=" + cod;
            SqlCommand comando = new SqlCommand(cadena, conexion);
            int cant;
            cant = comando.ExecuteNonQuery();
            if (cant == 1)
            {
                MessageBox.Show("Se modificaron los datos del artículo");
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
            }
            else
                MessageBox.Show("No existe un artículo con el código ingresado");
            conexion.Close();
            button2.Enabled = false;
        }
    }
}

Primero indicamos el uso del espacio de nombres relacionado a la comunicación con SQL Server:

using System.Data.SqlClient;

Como en los dos métodos utilizamos el objeto SqlConnection lo definimos como un atributo de la clase Form1:

    public partial class Form1 : Form
    {
        private SqlConnection conexion = new SqlConnection("server=DIEGO-PC\\SQLEXPRESS ; database=base1 ; integrated security = true");

El algoritmo de consulta es idéntico al concepto que vimos anteriormente (salvo que los datos rescatados los mostramos en TextBox):

        private void button1_Click(object sender, EventArgs e)
        {
            conexion.Open();
            string cod = textBox1.Text;
            string cadena = "select descripcion, precio from articulos where codigo=" + cod;
            SqlCommand comando = new SqlCommand(cadena, conexion);
            SqlDataReader registro = comando.ExecuteReader();
            if (registro.Read())
            {
                textBox2.Text = registro["descripcion"].ToString();
                textBox3.Text = registro["precio"].ToString();
                button2.Enabled = true;
            }
            else
                MessageBox.Show("No existe un artículo con el código ingresado");
            conexion.Close();
        }

En el evento Click de la modificación procedemos a configurar un string con el comando SQL update rescatando los datos de los tres TextBox:

            string cod = textBox1.Text;
            string descri = textBox2.Text;
            string precio = textBox3.Text;
            string cadena = "update articulos set descripcion='"+descri+"', precio="+precio+" where codigo=" + cod;

Seguidamente creamos un objeto de la clase SqlCommand pasando al constructor el string con el comando update y la referencia a la conexión:

            SqlCommand comando = new SqlCommand(cadena, conexion);

Llamamos al método ExecuteNonQuery para que se ejecute el comando update por parte del SQL Server y nos retorne la cantidad de registros afectados:

            int cant;
            cant = comando.ExecuteNonQuery();

Si retorna un uno significa que se efectuó la modificación:

            if (cant == 1)
            {
                MessageBox.Show("Se modificaron los datos del artículo");
                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
            }

En pantalla tenemos la siguiente interfaz luego de modificar un artículo:

comando delete SqlCommand SQL Server

Retornar