C# CGI UNIDAD 5: INTRODUCION A LAS BASES DE DATOS
TEMA 13: EDICION DE REGISTROS
Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacÃón o para corregir algun error de captura original o para agregar alguna columna que no existia por modificación de la tabla o la base de datos.
En general se tiene otro problema de sql UPDATE, sin embargo ahora se tendran que construir varios programas, estos son:
1.- prog24.html: una forma normal de busqueda por clave
2.- prog24.cs: el mismo programa de busqueda por clave, pero ahora debera construir una forma.html dinamica( es decir un monton de system.console.writeline), que contendra un form action apuntando o ejecutando al prog25.cs o exe, ademas tendra todos los input text necesarios para cargar cada celda del renglon de busqueda.
3.- prog25.cs: recoje los datos ya modificados de la forma.html dinamica y realiza directamente un sql update en la base de datos
prog24.html
<HTML> <FORM ACTION=/cgi-bin/tusitio/prog24.exe METHOD=get> CLAVE A MODIFICAR.:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit VALUE=BUSCAR> </FORM></HTML>
prog24.cs
using System;
using System.Data;
using System.Data.OleDb;
public class prog24
{
// creando y cargando coneccion, adpater como variables globales
static OleDbConnection coneccion;
static OleDbDataAdapter canal;
public static void Main()
{
lnet capturar=new lnet();
string clave= capturar.getparametro("CLAVE");
coneccion=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\\progfacil\\tusitio\\mibase.mdb");
string q="select * from mitabla where clave = @CLAVE";
canal=new OleDbDataAdapter(q, coneccion);
// clave es string porque oledbtype es quien la convierte
canal.SelectCommand.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer));
canal.SelectCommand.Parameters["@CLAVE"].Value = clave;
// creando y cargando un nuevo dataset que solo contiene el renglon 0(cero) buscado
DataSet tabla=new DataSet();
canal.Fill(tabla, "mitabla");
// CONSTRUYENDO LA FORMA DINAMICA
System.Console.WriteLine("Content-Type:text/html\n");
System.Console.WriteLine("<HTML><FORM ACTION=/CGI-BIN/LAURO/PROG25.EXE METHOD=GET>");
// sacando la clave del renglon del dataset y no declara porque ya esta arriba
clave=tabla.Tables["mitabla"].Rows[0][0].ToString();
System.Console.WriteLine("CLAVE:<INPUT TYPE=TEXT NAME=CLAVE VALUE="+clave.ToString()+"><BR>");
// sacando el nombre del renglon del dataset
string nombre=tabla.Tables["mitabla"].Rows[0][1].ToString();
System.Console.WriteLine("NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE VALUE="+nombre.ToString()+"><BR>");
//sacando la edad del renglon del dataset
string edad=tabla.Tables["mitabla"].Rows[0][2].ToString();
System.Console.WriteLine("EDAD:<INPUT TYPE=TEXT NAME=EDAD VALUE="+edad.ToString()+"><BR>");
System.Console.WriteLine("<INPUT TYPE=SUBMIT VALUE=MODIFICAR>");
System.Console.WriteLine("</FORM></HTML>");
// cerrando todo
coneccion.Close();
} }
Recordar que los parametros se pueden agregar a un adapter(canal) o a un command(orden) todo depende de si se quiere trabajar con el dataset(este caso es canal) o directemente con la coneccion(este caso es command).
Es mas facil este ultimo caso, pero si se quiere desplegar la tabla que se tiene en memoria, entonces se tendria que volver a cargar el canal=dataset, pero si solo se quiere hacer un cambio directamente en la tabla en disco, es mejor usar directamente el objeto command.
En este ejemplo usamos canal-dataset porque se quieren pasar los valores del dataset una forma html.
Prog25.cs
using System;
using System.Data;
using System.Data.OleDb;
public class prog25
{
// creando y cargando coneccion, adpater como variables globales
static OleDbConnection coneccion;
public static void Main()
{
// cargando las variables
lnet capturar=new lnet();
string clave=capturar.getparametro("CLAVE");
string nombre=capturar.getparametro("NOMBRE");
string edad=capturar.getparametro("EDAD");
// abriendo coneccion y COMMAND(A LO FLOJO)
coneccion = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\progfacil\\tusitio\\mibase.mdb");
string q = "UPDATE mitabla SET clave= @CLAVE, nombre= @NOMBRE, edad = @EDAD where clave= @CLAVE";
OleDbCommand orden= new OleDbCommand(q, coneccion);
//cargando y convirtiendo parametros
orden.Parameters.Add(new OleDbParameter("@CLAVE", OleDbType.Integer));
orden.Parameters["@CLAVE"].Value = clave;
orden.Parameters.Add(new OleDbParameter("@NOMBRE", OleDbType.VarWChar, 20));
orden.Parameters["@NOMBRE"].Value = nombre;
orden.Parameters.Add(new OleDbParameter("@EDAD", OleDbType.Integer));
orden.Parameters["@EDAD"].Value = edad;
// mandando actualizacion a la base de datos
orden.Connection.Open();
orden.ExecuteNonQuery();
orden.Connection.Close();
// avisando al usuario que ya se inserto
System.Console.WriteLine("Content-Type:text/html\n");
System.Console.WriteLine("REGISTRO ACTUALIZADO USAR PROG18 PARA DESPLEGARLO");
// cerrando todo
coneccion.Close();
} }
Aqui mejor se trabajo directamente un objeto COMMAND con el CONECCTION porque solo se quiere hacer el cambio en la tabla en disco y solo avisarle a usuario que ya se realizo (si funciona bien el programa).
Veamos la corrida completa:
Prog18.exe (tabla original)
prog24.html
forma dinamica que construye el prog24.exe
prog25.exe respondiendo
otra vez prog18.exe para ver como quedo la tabla original
no fue raton fue batman!!
Tareas PROGRAMACION :
1.- construir programas de edición para sus tablas y bases de datos