SISTEMA DE EDUCACION VIRTUAL TALLER . NET
MANTENIMIENTO DE DATOS CON
SENTENCIAS SQL
Sentencia de Inserción: INSERT
Agrega o inserta una nueva fila a una tabla de datos.
Sintaxis:
INSERT INTO tabla (lista_columnas)
VALUES (valor1, valor2, …, valor n)
Donde:
Lista_columnas se trata sobre los campos en las que se insertarán
los datos. Debe ir entre paréntesis y delimitada con comas.
Valor1, valor2, … , valor n son los valores o datos que van ser
insertados en la tabla.
Se hace uso de cláusulas como es el INTO, que es una palabra clave
opcional que se puede utilizar entre INSERT y la tabla de destino. La
cláusula VALUES presenta la lista de valores de datos que se van a insertar.
Debe haber un valor de datos para cada campo o columna definida en
lista_columnas (si se especificó) o en la tabla. La lista de valores debe estar
entre paréntesis. Si los valores de las listas VALUES no están en el mismo
orden que las columnas de la tabla o no tienen un valor para cada columna
de la tabla, debe utilizarse lista_columnas para especificar explícitamente la
columna que almacena cada valor de entrada.
Sentencia de Actualización: UPDATE
Cambia o modifica los datos de uno o varios registros de datos de una
tabla.
Sintaxis:
ING. MARTIN SALCEDO QUIÑONES PAGINA:1 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
UPDATE tabla
SET Columna1 = valor1,
Columna2 = valor2,
……………………………….
Columna = valor n
[WHERE condicion_filas]
Donde:
Lista_columnas se trata de una lista de una o más columnas las
cuales serán modificadas o actualizadas por la lista de valores las
cuales deben de estar separadas por coma.
Tabla es el nombre de la tabla que va a eliminar las filas.
Valor1, valor 2, … valor n son los valores que se van a ser
asignadas a las columnas.
Condición_filas es una expresión lógica que indica que las filas que
se van a modificar son aquellas para las que el valor de la expresión
es verdadero.
Se hace uso de cláusulas como es el SET que especifica la lista de nombres
de columnas o variables que se van a actualizar. La cláusula WHERE
especifica las condiciones que limitan a las filas que se actualizan.
Sentencia de Eliminación: DELETE
Elimina o borra registros de datos de una tabla.
Sintaxis:
DELETE FROM tabla
[WHERE condicion_filas]
Donde:
Tabla es el nombre de la tabla que va a eliminar datos
Condicion_filas es una expresión lógica que indica que las filas se van
a eliminar son aquellas para las que el valor de la expresión es
verdadero.
ING. MARTIN SALCEDO QUIÑONES PAGINA:2 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
Se hace uso de las cláusulas como es el FROM que se trata de una palabra
clave opcional que se puede utilizar entre la palabra clave DELETE. También
tenemos la cláusula WHERE que especifica las condiciones que limitan a las
filas que se eliminarán.
Aplicación
Vamos a usar la aplicación desarrollada en la sesión, es decir haremos un
mantenimiento de datos usando sentencias SQL sobre la tabla de Personal
perteneciente a la base de datos de empresa. Esta vez la base de datos de
empresa será creada en MySQL.
Solución
a. La base de datos empresa creada en MySql contiene a la tabla Personal
cuya estructura es la siguiente:
Idpersonal char(5)
Nombres varchar(32)
Apellidos varchar(32)
Cargo varchar(20)
Sueldo int
b. Una vez creada asegurarse de la existencia del conector/Net para MySql,
la misma que se instaló en una sesión anterior.
c. Creamos una solución denominada Aplica_Mantenimiento_SentenciasSql
y una vez que se muestra el entorno de desarrollo de SharpDevelop,
seleccionamos la ficha de Diseño e iniciamos colocando los objetos de
control. El diseño del formulario debe quedar así:
ING. MARTIN SALCEDO QUIÑONES PAGINA:3 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
d. Agregar la referencia para MySql, quedando las referencias así:
ING. MARTIN SALCEDO QUIÑONES PAGINA:4 de 14
Se debe visualizar la referencia para MySql
txtcodigo
txtnombres
txtapellido
txtcargo
txtsueldo
dgPersonal
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
e. A continuación iniciamos la programación creando procedimientos,
declarando variables de memorias y definiendo el código de la
programación para los objetos de control.
/* * Creado por SharpDevelop. * Usuario: Martín Salcedo * Fecha: 25/10/2007 * Hora: 10:09 a.m. * * Para cambiar esta plantilla use Herramientas | Opciones | Codificación | Editar Encabezados Estándar */
using System;using System.Collections.Generic;using System.Drawing;using MySql.Data.MySqlClient;using System.Data;using System.Windows.Forms;
namespace Aplica_Mantenimiento_SentenciasSQL{
/// <summary>/// Description of MainForm./// </summary>public partial class MainForm : Form{
public MySqlConnection cn;public string cod, nom, ape, car;public int sue;[STAThread]public static void Main(string[] args){
Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDe-
fault(false);Application.Run(new MainForm());
}
public MainForm(){
//// The InitializeComponent() call is required for
Windows Forms designer support.//InitializeComponent();//
ING. MARTIN SALCEDO QUIÑONES PAGINA:5 de 14
Agregar los paquetes para el manejo de MySql
Declarar éstas variables públicas
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
// TODO: Add constructor code after the Initial-izeComponent() call.
//}
void MainFormLoad(object sender, EventArgs e){
try{
cn=new MySqlConnec-tion("database=empresa;data source=localhost;user id=root");
actualizar();}catch{
Exception ex=new Exception();MessageBox.Show(ex.Message,"Conexion");
}}public void actualizar(){
string sql="select * from personal";cn=new MySqlConnection("database=empresa;data
source=localhost;user id=root");cn.Open();MySqlDataAdapter dac=new MySqlDataAdapter(sql,cn);DataTable dtc=new DataTable();dac.Fill(dtc);this.dgPersonal.DataSource=dtc;cn.Close();
}public void llenar(){
cod=this.txtcodigo.Text;nom=this.txtnombres.Text;ape=this.txtapellidos.Text;car=this.txtcargo.Text;sue=Convert.ToInt16(this.txtsueldo.Text);
}public void limpiar(){
this.txtcodigo.Clear();this.txtnombres.Clear();this.txtapellidos.Clear();this.txtcargo.Clear();this.txtsueldo.Clear();
}
void BtnNuevoClick(object sender, EventArgs e){
limpiar();this.txtcodigo.Focus();
}
ING. MARTIN SALCEDO QUIÑONES PAGINA:6 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
void BtnGrabarClick(object sender, EventArgs e){
MySqlCommand cmdgrabar;int rpta;rpta=Convert.ToInt16(MessageBox.Show("Desea
Grabar","Grabar", MessageBoxButtons.YesNo,MessageBoxIcon.Exclama-tion));
if(rpta==6){
llenar();cn=new MySqlConnec-
tion("database=empresa;data source=localhost;user id=root");cn.Open();string sql="insert into personal
values('"+cod+"','"+nom+"','"+ape+"','"+car+"',"+sue+")";cmdgrabar=new MySqlCommand(sql,cn);cmdgrabar.ExecuteNonQuery();cn.Close();limpiar();actualizar();
}}
void BtnBuscarClick(object sender, EventArgs e){
int t;cod=this.txtcodigo.Text;string sql="select * from personal where idperson-
al='"+cod+"'";cn=new MySqlConnection("database=empresa;data
source=localhost;user id=root");cn.Open();MySqlDataAdapter dac=new MySqlDataAdapter(sql,cn);DataTable dtc=new DataTable();dac.Fill(dtc);this.dgPersonal.DataSource=dtc;t=dtc.Rows.Count;if (t==0){
MessageBox.Show("No se encontraron reg-istros","Buscar", MessageBoxButtons.OK,MessageBoxIcon.Error);
}cn.Close();
}
void BtnModificarClick(object sender, EventArgs e){
MySqlCommand cmdmodificar;int rpta;rpta=Convert.ToInt16(MessageBox.Show("Desea Modi-
ficar los datos","Modificar", MessageBoxButtons.YesNo,MessageBoxI-con.Exclamation));
if (rpta==6){
ING. MARTIN SALCEDO QUIÑONES PAGINA:7 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
llenar();cn=new MySqlConnec-
tion("database=empresa;data source=localhost;user id=root");cn.Open();string sql="update Personal set
nombres='"+nom+"', apellidos='"+ape+"',";sql=sql+" cargo='"+car+"', sueldo="+sue+"
where idpersonal='"+cod+"'";cmdmodificar=new MySqlCommand(sql,cn);cmdmodificar.ExecuteNonQuery();cn.Close();limpiar();actualizar();
}}
void BtnEliminarClick(object sender, EventArgs e){
MySqlCommand cmdeliminar;int rpta;rpta=Convert.ToInt16(MessageBox.Show("Desea Elimi-
nar los datos","Modificar", MessageBoxButtons.YesNo,MessageBoxI-con.Exclamation));
if (rpta==6){
cn=new MySqlConnec-tion("database=empresa;data source=localhost;user id=root");
cn.Open();string sql="delete from Personal where id-
personal='"+cod+"'";cmdeliminar=new MySqlCommand(sql,cn);cmdeliminar.ExecuteNonQuery();cn.Close();limpiar();actualizar();
}}
}}
f. Vamos a continuación con la explicación de la programación:
1. Es necesario hacer lo siguiente:
using MySql.Data.MySqlClient;using System.Data;Esto permitirá trabajar con el gestor de base de datos MySql. Para
esto es necesario ya tener como referencia a MySql.Data.
2. Declarar como variables públicas dentro de la clase MainForm
public MySqlConnection cn;public string cod, nom, ape, car;
ING. MARTIN SALCEDO QUIÑONES PAGINA:8 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
public int sue;La variable cn es para establecer luego la conexión, las variables de
tipo String es para trabajar con los 4 primeros campos de la tabla de
Personal y la variable entera es para trabajar con el campo sueldo.
3. En el procedimiento actualizar() se programa:
public void actualizar(){
string sql="select * from personal";cn=new MySqlConnection("database=empresa;data source=lo-
calhost;user id=root");cn.Open();MySqlDataAdapter dac=new MySqlDataAdapter(sql,cn);DataTable dtc=new DataTable();dac.Fill(dtc);this.dgPersonal.DataSource=dtc;cn.Close();
}Se establece para la variable de tipo String sql el comando el select
para seleccionar todos los campos de la tabla de personal. Con el
evento Open() se establece la conexión con la variable cn. Se crea
una variable del tipo DataAdapter, usando el comando select y la
conexión cn. Se crea la variable dtc del tipo DataTable y con el
método fill se logra manejar los registros de la tabla Personal en el
DataTable. Finalmente la variable dtc se asigna a la propiedad
DataSource para visualizar los datos de la Tabla Personal en el
DataGrid dgPersonal para luego cerrar la conexión con el método
Close().
4. En el procedimiento llenar() se programa:
public void llenar(){
cod=this.txtcodigo.Text;nom=this.txtnombres.Text;ape=this.txtapellidos.Text;car=this.txtcargo.Text;sue=Convert.ToInt16(this.txtsueldo.Text);
}Permite asignar los datos que se encuentran en los cuadros de textos
a cada una de las variables públicas declaradas en la clase MainForm.
ING. MARTIN SALCEDO QUIÑONES PAGINA:9 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
5. En el procedimiento limpiar() se programa:
public void limpiar(){
this.txtcodigo.Clear();this.txtnombres.Clear();this.txtapellidos.Clear();this.txtcargo.Clear();this.txtsueldo.Clear();
}Es para limpiar los cuadros de textos.
6. En el evento Load de MainForm se programa:
void MainFormLoad(object sender, EventArgs e){
try{
cn=new MySqlConnec-tion("database=empresa;data
source=localhost;user id=root");actualizar();
}catch{
Exception ex=new Exception();MessageBox.Show(ex.Message,"Conexion");
}}
Se crea o se instancia la variable objeto cn indicando la cadena de
conexión (estoy asumiendo que MySql tiene como identificador de
usuario a root y no tiene contraseña). Luego con el método o
procedimiento actualizar() muestro los datos de la tabla de Personal
en el objeto DataGrid dgPersonal.
7. En el botón de comando btnNuevo en su evento clic se programa:
void BtnNuevoClick(object sender, EventArgs e){
limpiar();this.txtcodigo.Focus();
}Se limpia los cuadros de textos con limpiar() y se coloca el cursor en
el objeto txtcodigo.
8. En el botón de comando btnGrabar en su evento clic se programa:
void BtnGrabarClick(object sender, EventArgs e)
ING. MARTIN SALCEDO QUIÑONES PAGINA:10 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
{MySqlCommand cmdgrabar;int rpta;rpta=Convert.ToInt16(MessageBox.Show("Desea Grabar",
"Grabar", MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation));
if(rpta==6){
llenar();cn=new MySqlConnection("database=empresa;data
source=localhost;user id=root");cn.Open();string sql="insert into personal
values('"+cod+"','"+nom+"','"+ape+"','"+car+"',"+sue+")";cmdgrabar=new MySqlCommand(sql,cn);cmdgrabar.ExecuteNonQuery();cn.Close();limpiar();actualizar();
}}Se declara la variable cmdgrabar del tipo SqlCommand (comando) y
la variable entera rpta. Se muestra un mensaje indicando si se desea
grabar y si la respuesta es afirmativa se procede a emplear el
procedimiento o método llenar(). Se establece la conexión con cn,
se prepara una variable sql para hacer uso del comando insert
(comando explicado al inicio de la presente sesión). A continuación se
instancia a la variable cmdgrabar usando el comando insert cuya
estructura se encuentra dentro de la variable sql y la conexión cn. Se
procede a grabar con el método ExecuteNonQuery() que hace
efectiva la ejecución del comando insert. Finalmente se cierra la
conexión con el método close() y se procede a ejecutar los métodos
limpiar() y actualizar().
9. En el botón de comando btnBuscar, en el evento clic se programa:
void BtnBuscarClick(object sender, EventArgs e){
int t;cod=this.txtcodigo.Text;string sql="select * from personal where idpersonal='"+cod
+"'";cn=new MySqlConnection("database=empresa;data source=lo-
calhost;user id=root");cn.Open();MySqlDataAdapter dac=new MySqlDataAdapter(sql,cn);
ING. MARTIN SALCEDO QUIÑONES PAGINA:11 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
DataTable dtc=new DataTable();dac.Fill(dtc);this.dgPersonal.DataSource=dtc;t=dtc.Rows.Count;if (t==0){
MessageBox.Show("No se encontraron registros","Buscar", MessageBoxButtons.OK,MessageBoxIcon.Error);
}cn.Close();
}Aquí se pretende seleccionar un registro que cumpla la condición de
que el código de personal sea igual al contenido de la variable cod.
Se abre la conexión, se prepara una variable del tipo DataAdapter
denominada dac, se crea una variable dtc del tipo DataTable, con el
método fill se llena de registros a la variable dtc y ésta variable se
asigna a la propiedad DataSource del DataGrid dgPersonal. Si la
variable t que contiene el número de filas contenidas en el DataTable
dtc es igual a cero entonces se procede a mostrar un mensaje de
error.
10. En el botón de comando modificar, en el evento clic se programa:
void BtnModificarClick(object sender, EventArgs e){
MySqlCommand cmdmodificar;int rpta;
rpta=Convert.ToInt16(MessageBox.Show("Desea Modificar los datos","Modificar", MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation));
if (rpta==6){
llenar();cn=new MySqlConnection("database=empresa;data
source=localhost;user id=root");cn.Open();string sql="update Personal set nombres='"+nom+"',
apellidos='"+ape+"',";sql=sql+" cargo='"+car+"', sueldo="+sue+" where
idpersonal='"+cod+"'";cmdmodificar=new MySqlCommand(sql,cn);cmdmodificar.ExecuteNonQuery();cn.Close();limpiar();actualizar();
}}La programación es similar al botón de comando Grabar, pero se
hace uso del comando UPDATE. Como verá se puede modificar todos
ING. MARTIN SALCEDO QUIÑONES PAGINA:12 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
los datos de un empleado a excepción del código de personal. Se
hace uso de la cláusula WHERE para sólo modificar para un
empleado.
11.En el botón de comando Eliminar, en el evento clic se programa:
void BtnEliminarClick(object sender, EventArgs e){
MySqlCommand cmdeliminar;int rpta;rpta=Convert.ToInt16(MessageBox.Show("Desea Eliminar los
datos","Modificar", MessageBoxButtons.YesNo,MessageBoxIcon.Exclamation));if (rpta==6){
cn=new MySqlConnection("database=empresa;data source=localhost;user id=root");
cn.Open();string sql="delete from Personal where idpersonal='"+cod+"'";sql=sql+" cargo='"+car+"', sueldo="+sue+" where
idpersonal='"+cod+"'";cmdeliminar=new MySqlCommand(sql,cn);cmdeliminar.ExecuteNonQuery();cn.Close();limpiar();actualizar();
}}
En esta oportunidad se hace uso del comando DELETE que borrará
aquel registro cuyo código de personal sea igual al contenido de la
variable cod.
g. Finalmente grabar todos los cambios y proceder a la ejecución.
TAREA
Usando la aplicación mostrada recientemente con C# y MySQl, desarrolla el
mismo ejemplo con VB Net y MySql. Puedes proponer otra lógica de
programación como también mejorarla, pero eso sí se debe hacer uso del
objeto DataGrid.
ING. MARTIN SALCEDO QUIÑONES PAGINA:13 de 14
SISTEMA DE EDUCACION VIRTUAL TALLER . NET
ING. MARTIN SALCEDO QUIÑONES PAGINA:14 de 14