- ¿Que es
SQL? - Ado net active x data
object - SQL select: consulta o despliegue
o selección - SQL insert: inserción o
adición de registros - SQL select:
búsqueda - Select where: filtros
SQL - SQL uppadte: operaciones con
campos - SQL delete: baja o
eliminación - SQL update: edición de
registros - Gráficos Sql
select
Visual Basic es un lenguaje
de programación de propósito
general, con una gran
potencia en toda su
estructura. Su implementación en
el
sistema operativo
Windows y sus
herramientas visuales, han hecho de este
lenguaje un
líder indiscutible en lo que
a
desarrollo de aplicaciones se refiere. Con la
versión 3.0. se implementó la
gestión de bases
de datos a muy alto nivel, pudiendo gestionar
bases de datos
de tipo Access,
Paradox, dBASE, FoxPro,
etc.
Este paso de gigante ha hecho de
Visual Basic uno de los lenguajes favoritos por
los desarrolladores de aplicaciones de bases
de datos, en especial el hecho de que
Visual Basic implemente
el lenguaje
SQL, uno de los más potentes y
sencillos lenguajes de bases de datos.
SQL (Structured Query Language ó
Lenguaje Estructurado de Consulta), es un
lenguaje
bastante sencillo, principalmente orientado a bases de datos y,
sobre todo, al manejo de consultas.
Visual Basic incorpora esta extensión
junto a nuestras bases de datos, obteniendo
potentes resultados. De hecho, las consultas que se realizan
en Access,
están desarrolladas o basadas en este lenguaje, por lo que
su implementación en
Visual Basic no es complicada.
El
objetivo principal de SQL es la
realización de consultas y cálculos con los datos
de una o varias tablas.
Consejos para escribir mandatos en SQL:
He aquí una serie de consejos (a veces normas),
que hay que tener en cuenta a la hora de escribir mandatos SQL en
nuestras aplicaciones en Visual Basic:
1. Un mandato en SQL se expresa en una cadena de caracteres o
String.
2. Dicho mandato se puede escribir en la
propiedad RecordSource de un
control Data (más adelante, podremos
prescindir del
control Data para realizar nuestras consultas),
con el fin de crear una consulta en la interfaz.
3. Los nombres de los campos especificados (y de las tablas), que
contengan más de una palabra, han de encerrarse entre
corchetes ([nombre]). Como norma general, se suelen escribir
siempre entre corchetes.
4. Para especificar un determinado campo de una determinada
tabla, se ha de escribir primero el nombre de la tabla, un punto
y, a continuación, el nombre del campo
(nombre_tabla.nombre_campo).
5. Al especificar una expresión de búsqueda, si
ésta se refiere a una expresión de caracteres,
éstos han de encerrarse entre comillas simples
('expresión_a_buscar').
6. Para especificar una fecha en una búsqueda, ésta
debe encerrarse entre signos
numeral
(#fecha#) en Access,
Dbase X, etc., y entre comillas simples ('fecha') para
bases
Sql Server, Informix, etc.
7. Si se utiliza la
propiedad RecordSource del control Data,
para crear nuestras consultas en SQL, tras introducir el mandato
SQL (siempre como una expresión de cadena) es necesario
refrescar el control Data (control_data.Refresh).
Mandato SQL Estándar:
El
lenguaje SQL está compuesto por una serie
de sentencias y de cláusulas muy reducidas en
número, pero muy potentes en efectividad. De entre todas
las palabras, existen cuatro que son las más utilizadas,
estando compuestas por una sentencia y por tres
cláusulas:
SELECT lista_campos FROM lista_tablas [WHERE criterios [ORDER BY
lista_campos]]
El Nuevo Modelo De
Datos De Microsoft Es
Ado Net Este Modelo Descansa En Una Serie De Objetos
Especializados Que Facilitan El Procesamiento De Una Base De
Datos.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Fuente Microsoft net
Empezando:
El problema es comunicar un programa o
aplicación con una base de datos y más que
comunicar se pretende que el programa o aplicación realice
una serie de procesos u
operaciones
con la base de datos o mejor aun con el conjunto de tablas que
contiene una base de datos.
La primera nota a recordar es que una base de datos
puede estar físicamente en el servidor y en
algún fólder o directorio del disco duro de
dicha maquina servidora por ejemplo,
c:progfacilmisitiomibase.mbd, como se observa la base que se
construyo en Access
(mibase.mbd) se almaceno en el disco c en el fólder
progfacil y dentro del subfolder misitio.
Sin embargo también es necesario conocer que
así como existen servidores de
paginas ( Web Server ),
servidores de correo ( mail server ), servidores de ftp ( ftp
server ), etc., también existen servidores de bases de
datos (database server), los mas comunes son el sqlserver de
microsoft, oracle,
mysql, etc.,
estos servidores también pueden crear, administrar y
procesar una base de datos por supuesto que el procedimiento que
se dio para crearla en access en el tema
anterior no se puede usar para crear y cargar una base de datos
en un servidor de bases de datos. El modo de comunicarse entre
nuestro programa visual basic net
o aplicación y la base de datos (ya sea física o un dbserver)
implica que ambos manejen un lenguaje de
programación común, es decir no se puede mandar
una instrucción en C# o en borland delphi
java a la base
de datos y además esperar que esta ultima la entienda (
para entender esto, una razón muy sencilla es que la base
de datos tendría que conocer o comprender todos los
lenguajes de
programación), para resolver este problema de comunicación es que se usa un lenguaje
común de bases de datos que tanto los lenguajes de
programación existentes como las bases de
datos entienden, este lenguaje común de bases de datos es
el SQL (structured query languaje) o lenguaje estructurado de
consultas.
La pregunta es ahora como mandamos las instrucciones sql
a la base de datos, la respuesta son los OBJETOS ADO.NET
que estamos analizando en orden y propósito de
uso.
OBJETO CONNECTION:- OBJETO QUE SE UTILIZA
PARA ESTABLECER UNA CONECCION O ENLACE A LA BASE DE
DATOS.
Este objeto primero se tendrá que crear en el
programa y luego se tendrá que cargar con dos
parámetros (ver ejemplo mas abajo), el primer
parámetro es el proveedor o la fuente que proporcionara
los datos, los proveedores o
fuentes de
datos que existen son:
SQLSERVER NET DATA PROVIDER.- QUE SE ESPECIALIZA EN
COMUNICARSE Y PROCESAR BASES DE DATOS CONSTRUIDAS CON MICROSOF
SQL SERVER
V7.0
OLEDB.NET DATA PROVIDER.- QUE SE ESPECIALIZA EN
COMUNICARSE Y PROCESAR BASES DE DATOS QUE A LA FECHA DEL PRESENTE
LIBRO UTILIZEN
ALGUNOS DE LOS SIGUIENTES DRIVERS, SQLOLEDB ( VERSIONES
ANTERIORES DE SQL SERVER DE MICROSOFT), MSDAORA (ORACLE),
MICROSOFT.JET ( ACCESS Y ALGUNOS OTROS DBMS DE
MICROSOFT)
ODBC.NET .- BASES DE DATOS QUE USAN ODBC COMO MEDIO DE
COMUNICACION CON OTRAS BASES DE DATOS Y APLICACIONES, COMO NOTA A
CONSIDERAR ODBC.NET NO ESTA INCLUIDA POR DEFAULT EN
MICROSOFT.NET, SE TIENE QUE BAJAR DE MICROSOFT.
El segundo parámetro es la propia base de datos
con la cual se comunicara el programa o
aplicación.
Ejemplo del objeto CONNECTION
DIM coneccion AS OLEDBCONNECTION
conation = NEW
OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfacillauromibase.mdb")
Es una sola string y los dos parámetros
mencionados van separados por el punto y coma.
ATENCION es DATA SOURCE= no usar DATASOURCE= estan
advertidos.
Ejemplos de los otros proveedores o fuentes
mencionados:
Ejemplos de los otros proveedores o fuentes
mencionados:
//Provider=MSDAORA; Data Source=ORACLE8i7; User
ID=OLEDB; Password=OLEDB
//Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=c:binLocalAccess40.mdb;
//Provider=SQLOLEDB;Data Source=MySQLServer;Integrated
Security=SSPI;
OBJETO COMMAND.- Este objeto puede
contener directamente una instrucción SQL y enviarla al
objeto conección ya descrito.
Ya establecido el canal o enlace entre el programa aspx
y la base de datos vía el objeto CONECCION, se debe mandar
la instrucción SQL a la propia base de datos, sin embargo
en un programa de vbasic por supuesto que no puede contener
instrucciones de otros lenguajes de programación como el
de SQL, es por esto que se deberán usar algunos de los
otros objetos de ADO.NET para que estos objetos transporten la
instrucción sql hacia la base de datos (y transporte de
regreso al servidor los datos de alguna tabla), uno de estos
objetos es el objeto COMMAND.
Este objeto command primero se tendrá que crear y
luego cargarle dos parámetros que son:
La instrucción sql y el objeto conneccion que ya
se vio en el párrafo
anterior, ejemplo:
DIM orden AS OLEDBCOMMAND
Orden = NEW OLEDBCOMMAND("select * from mitabla",
coneccion)
Si esta muy grande o muy compleja la instrucción
sql, es más conveniente crearla en una variable string y
poner la variable como parámetro ejemplo:
DIM orden AS OLEDBCOMMAND
DIM q AS STRING
q = "select * from mitabla"
orden = NEW OLEDBCOMMAND(q, coneccion)
Sin embargo ciertas instrucciones de sql, requieren que
se manden los datos a la base de datos, respetando el tipo de
dato con los cuales los creo el software de bases de datos,
por ejemplo si edad en access se declaro como NUMBER, la
instrucción sql que pretenda cargar dicho campo, tiene la
obligación de mandarla con este tipo de dato asociado,
instrucciones SQL que permiten cargar o capturar ese campo edad
son INSERT o UPADTE.
Para resolver este problema, usaremos en la string q,
unas variables
llamadas VARIABLES PARAMETROS que se simbolizan usando el
símbolo @ antes de la variable y además al objeto
COMMAND le agregamos dos instrucciones extras que permiten
agregar a la string q el dato y el tipo de dato, ejemplo, se
tienen seis renglones ya capturados en nuestra tabla y se quiere
agregar un séptimo renglón con los siguientes
datos, clave=7, nombre="rana" peso=3.14 , usaremos la
instrucción SQL INSERT ej:
DIM orden AS OLEDBCOMMAND
DIM q, clave, nombre, peso AS STRING
Clave = 7: nombre = "rana": peso = 3.14
Q ="insert into mitabla(clave,nombre,peso)
values(@CLAVE, @NOMBRE, @PESO)"
orden= new OleDbCommand(q, coneccion)
orden.Parameters.Add(new OleDbParameter("@CLAVE",
OleDbType.Integer))
orden.Parameters("@CLAVE").Value = clave
orden.Parameters.Add(new OleDbParameter("@NOMBRE",
OleDbType.VarWChar, 40))
orden.Parameters("@NOMBRE").Value = nombre
orden.Parameters.Add(new OleDbParameter("@PESO",
OleDbType.Double))
orden.Parameters("@PESO").Value = edad
Observar que para cada variable parametro(@), se tienen
que cargar dos elementos, el valor y el
tipo de dato correpondiente.
Aunque en valor se mandan string's, en oledbtype se hace
un mapeo, relación o conversión al tipo de dato que
se uso en access, tener mucho cuidado que exista una
relación igual o cuando este programa se ejecute el
servidor les va a mandar un error o excepción de sql, que
les intenta decir que el tipo de dato que mandaron a la base de
datos, no es igual al que se uso para crearlo en la base de
datos.
Los OLEDBTYPE más comunes
son:
BigInt A 64-bit signed integer (DBTYPE_I8). This
maps to Int64.
Binary A stream of binary data (DBTYPE_BYTES).
This maps to an Array of type Byte.
Boolean A Boolean value (DBTYPE_BOOL). This maps
to Boolean.
BSTR A null-terminated character string of
Unicode characters (DBTYPE_BSTR). This maps to String.
Char A character string (DBTYPE_STR). This maps
to String.
Currency A currency value ranging from
-263 (or -922,337,203,685,477.5808) to 2 63
-1 (or +922,337,203,685,477.5807) with an accuracy to a
ten-thousandth of a currency unit (DBTYPE_CY). This maps to
Decimal.
Date Date data, stored as a double (DBTYPE_DATE).
The whole portion is the number of days since December 30, 1899,
while the fractional portion is a fraction of a day. This maps to
DateTime.
DBDate Date data in the format yyyymmdd
(DBTYPE_DBDATE). This maps to DateTime.
DBTime Time data in the format hhmmss
(DBTYPE_DBTIME). This maps to TimeSpan.
DBTimeStamp Data and time data in the format
yyyymmddhhmmss (DBTYPE_DBTIMESTAMP). This maps to
DateTime.
Decimal A fixed precision and scale numeric value
between -1038 -1 and 10 38 -1
(DBTYPE_DECIMAL). This maps to Decimal.
Double A floating point number within the range
of -1.79E +308 through 1.79E +308 (DBTYPE_R8). This maps to
Double.
Empty No value (DBTYPE_EMPTY). This maps to
Empty.
Error A 32-bit error code (DBTYPE_ERROR). This
maps to Exception.
Filetime A 64-bit unsigned integer representing
the number of 100-nanosecond intervals since January 1, 1601
(DBTYPE_FILETIME). This maps to DateTime.
Guid A globally unique identifier (or GUID)
(DBTYPE_GUID). This maps to Guid.
IDispatch A pointer to an IDispatch interface
(DBTYPE_IDISPATCH). This maps to Object. Note This data type is
not currently supported by ADO.NET. Usage may cause unpredictable
results.
Integer A 32-bit signed integer (DBTYPE_I4). This
maps to Int32.
IUnknown A pointer to an IUnknown interface
(DBTYPE_UNKNOWN). This maps to Object. Note This data type is not
currently supported by ADO.NET. Usage may cause unpredictable
results.
LongVarBinary A long binary value (OleDbParameter
only). This maps to an Array of type Byte.
LongVarChar A long string value (OleDbParameter
only). This maps to String.
LongVarWChar A long null-terminated Unicode
string value (OleDbParameter only). This maps to String.
Numeric An exact numeric value with a fixed precision and
scale (DBTYPE_NUMERIC). This maps to Decimal. PropVariant
An automation PROPVARIANT (DBTYPE_PROP_VARIANT). This maps to
Object.
Single A floating point number within the range
of -3.40E +38 through 3.40E +38 (DBTYPE_R4). This maps to
Single.
SmallInt A 16-bit signed integer (DBTYPE_I2).
This maps to Int16.
TinyInt A 8-bit signed integer (DBTYPE_I1). This
maps to SByte.
UnsignedBigInt A 64-bit unsigned integer
(DBTYPE_UI8). This maps to UInt64.
UnsignedInt A 32-bit unsigned integer
(DBTYPE_UI4). This maps to UInt32.
UnsignedSmallInt A 16-bit unsigned integer
(DBTYPE_UI2). This maps to UInt16.
UnsignedTinyInt A 8-bit unsigned integer
(DBTYPE_UI1). This maps to Byte.
VarBinary A variable-length stream of binary data
(OleDbParameter only). This maps to an Array of type Byte.
VarChar A variable-length stream of non-Unicode characters
(OleDbParameter only). This maps to String.
Variant A special data type that can contain
numeric, string, binary, or date data, as well as the special
values Empty and Null (DBTYPE_VARIANT). This type is assumed if
no other is specified. This maps to Object.
VarNumeric A variable-length numeric value
(OleDbParameter only). This maps to Decimal.
VarWChar A variable-length, null-terminated
stream of Unicode characters (OleDbParameter only). This maps to
String.
WChar A null-terminated stream of Unicode
characters (DBTYPE_WSTR). This maps to String.
Aun mas con el ejemplo anterior el objeto COMMAND esta
construido y preparado y cargado pero todavía no se manda
desde el programa a la base de datos, es decir le falta usar las
siguientes tres propiedades, ejemplo;
DIM orden AS OLEDBCOMMAND
DIM q, clave, nombre, peso AS STRING
Clave = 7: nombre = "rana": peso = 3.14
Q ="insert into mitabla(clave,nombre,peso)
values(@CLAVE, @NOMBRE, @PESO)"
orden= new OleDbCommand(q, coneccion)
orden.Parameters.Add(new OleDbParameter("@CLAVE",
OleDbType.Integer))
orden.Parameters("@CLAVE").Value = clave
orden.Parameters.Add(new OleDbParameter("@NOMBRE",
OleDbType.VarWChar, 40))
orden.Parameters("@NOMBRE").Value = nombre
orden.Parameters.Add(new OleDbParameter("@PESO",
OleDbType.Double))
orden.Parameters("@PESO").Value = edad
orden.Connection.Open()
orden.ExecuteNonQuery()
orden.Connection.Close()
Sencillo abrir la conexión, mandar o ejecutar la
instrucción y cerrar la conexión.
OBJETOS DATAADAPTER Y DATASET:(dos por
uno)
Con los objetos CONNECTION y COMMAND ya se pueden
efectuar cualquiera de la operaciones SQL descritas, el problema
es que pasa con el usuario, cuando va a ver base de datos o mejor
aun las tablas que estan en la base de datos en disco.
DATASET:- Es una copia en memoria(de la
maquina cliente) de la
base de datos( y todas sus tablas) que se encuentra en
disco.
DATAADAPTER.- En principio es muy similar al
objeto COMMAND es decir se usa para transportar instrucciones SQL
a la base en disco, de hechos sus formatos e instrucciones son
muy similares a los vistos para el objeto COMMAND, su
diferencia principal es que dataadapter esta mas especializado y
contiene una serie de métodos
que facilitan la interacción entre el DATASET y la Base de
Datos en disco.
En particular muchos de los programas que se
verán en temas posteriores solo usan los objetos
CONNECTION, DATAADAPTER y DATASET.
Otra vez, dataadpater se especializa en transportar
instrucciones sql a la base de datos en disco pero además
se utiliza para cargar la tabla en memoria o dataset del
cliente.
Ejemplo:
' abriendo la coneccion
coneccion = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
' cargando el adapter con la instruccion sql
canal=new OleDbDataAdapter("select * from mitabla",
coneccion)
' cargando el dataset
tabla= new DataSet()
canal.Fill(tabla, "mitabla")
Como se observa en este ejemplo muy sencillo, el
dataadapter(canal) esta funcionando de manera muy similar al
primer ejemplo que se vio del objeto COMMAND, pero tengan la
seguridad que
también se pueden usar variables parámetros y
agregarles los dos tipos de parámetros a este objeto
dataadpater.
Observar que su propiedad FILL
carga el DATASET(tabla) con una de las tablas en disco, recordar
que en la base de datos puede contener muchas tablas.
Además esa propiedad FILL es equivalente a las
tres ultimas instrucciones del objeto COMMAND, es decir open,
executenonquery y close, mas facil verdad.
DATAREADER y DATASET:
Observar que también se usan en forma conjunta,
primero es muy similar en uso y función
que el objeto DATAADAPATER, la diferencia entre datareader y
dataadapter es el tipo de base de datos con las cuales se pueden
comunicar, dataadpater se especializan en bases de datos
relacionales y datareader se especializa en archivos que no
se estudian en este curso.
También es importante mencionar que datareader
es el objeto de ADO.NET mas parecido al objeto RESULTSET que uso
mucho en el ADO anterior de microsoft.
EN general se han visto de manera sencilla los
principales objetos ADO.ASP( connection,
command, datareader, dataadapter, dataset), sin embargo la tabla
o las tablas y la base de datos que se tiene en disco o
sirviéndola algún servidor de bases de datos, se ha
quedado en la memoria de
la maquina del cliente, ADO.NET ha terminado su trabajo y su
función.
Para mandar el dataset a el browser se tendrá que
pasar a algún tipo de objeto visible que soporte el
browser, los objetos que se pueden usar para mandar el dataset a
pantalla son:
1.- COMPONENTE TABLE DE HTML
2.- COMPONENTE HTMLTABLE DE ASP
3.- COMPONENTE DATAGRID DE ASP NET
SQL
SELECT: CONSULTA O DESPLIEGUE O SELECCION
Existen una serie de operaciones y procesos que son muy
comunes contra una tabla en una base de datos en disco la mas
común es desplegar todos los renglones de la tabla que
estan almacenados en disco, a este proceso le
llamaremos SELECCION, consulta o despliegue (muy
original).
Como se indico anteriormente la
comunicación con la base de datos se tendrán
que dar usando el lenguaje
especializado de bases de datos llamado SQL (structured query
language), la instrucción sql que se usa para resolver
este problema tiene el siguiente formato:
SELECT [listacampos, * o ALL] FROM TABLA
El procedimiento que se intenta seguir cuando se
construya un programa asp.net que tenga que manipular una tabla
en disco deberá seguir los siguientes pasos:
1.- Crear una conección o enlace a la base de
datos.
2.- Abrir la conección a la base de
datos.
3.- Crear el enlace o adapater y cargarlo con la
instrucción sql (o cargar primero la instrucción
sql en un objeto command y mandarlo a través del
adapter)
4.- Crear el dataset y cargarlo a través del
adapter
5.- Cargar el DataGrid con el dataset y
enlazarlo(binding)
6.- Procesar el datagrid (editar un renglón,
agregar un renglón, modificar un renglón,
etc.)
7.- Cerrar la conección
Código prog25.aspx
<%@ PAGE LANGUAGE=VB%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<FORM RUNAT=SERVER>
<ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER
Width=400
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
EnableViewState=false
/></FORM>
<html>
<script runat=server>
' creando y cargando coneccion, adpater, dataset como
variables globales
DIM coneccion AS OLEDBCONNECTION
DIM canal AS OLEDBDATAADAPTER
DIM tabla AS DATASET
SUB Page_Load(Sender As Object, E As
EventArgs)
' enlazando coneccion a la base de datos
coneccion = NEW
OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=c:progfaciltusitiomibase.mdb")
' cargando el adapter con la instruccion sql
canal = NEW OLEDBDATAADAPTER("select * from mitabla",
coneccion)
' cargando el dataset
tabla = NEW DATASET()
canal.FILL(tabla, "mitabla")
' cargando el datagrid
TABLAGRID.DATASOURCE = tabla
TABLAGRID.DATAMEMBER = "mitabla"
TABLAGRID.DATABIND()
' cerrando conneccion
coneccion.CLOSE()
END SUB
</script>
corrida prog25.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
1.- Se sigue el procedimiento genérico para
procesar tablas usando ADO.NET
2.- Observar y siempre incluir los namespaces
indicados.
3.- Se usa una PAGINA (page) y su evento pageload() para
desplegar la tabla(mitabla) que esta en la base de datos(mibase),
se puede cargar e inicializar usando un objeto button=desplegar
con este mismo código
cargado en su evento onclick, pero es criterio de ustedes como se
despliega la tabla.
4.- Recordar que DATAGRID es un WEBCONTROL por tanto hay
que crearlo e inicializarlo al principio del programa,
también recordar que datagrid tiene muchas propiedades que
le mejoran la interfase con que se despliega y es en esta parte
donde se cargan dichas propiedades.
5.- Se empieza creando las variables globales a ocupar y
abriendo la conección a la base de datos, si se les hace
muy grande la string del proveedor, pueden cargarla primero en
una variable string y carguen la string en el constructor de la
conección, pero esto es opcional.
6.- Tomar nota como se hace la referencia a la base de
datos.
7.- Se crea el adapter y se carga el constructor con la
instrucción sql y la conexión, aquí es
necesario entender que existen varias maneras de hacer
esto:
Cargar una string con el sql y crear y usar un objeto
command directamente por ejemplo comandtext=stringsql; y luego
todavía se tendría que ejecutar con
executenonquery(que ejecuta una string que no regresa datos por
ejemplo insert o update para un adpater) o executereader(si en
lugar de usar adapter se usa un reader) o executescalar( método que
regresa un solo dato de la base de datos).
Usar algunas de las funciones
descritas del adapter por ejemplo
adpatercommandselect(stringsql).
Pero lo mas sencillo fue usar el método que se
puso en el programa, es decir crear el adapter y pasarle
directamente la instrucción sql.
8.- Luego se creo el dataset y se cargo con toda la base
de datos en disco, entender esto bien, dataset puede quedar
cargado con todas las tablas que tenga la base de datos, por eso
se usa un FILL para pasar al dataset solo una de las tablas(mi
tabla), esto da origen a dos notas:
8.1.- Al programar mas adelante se ocupara
explícitamente indicarle al compilador con cual tabla se
va a trabajar, es por esta razón que se verán
instrucciones tales como tabla.tables["clientes"].etc.etc. Aquí se esta diciendo
al compilador que del dataset(TABLA) se va a realizar una proceso
con la tabla de clientes.
8.2.- Para procesar dos o mas tablas, entonces se tendra
que usar mucho el formato que se vio en la nota 8.1
9.- Al final se carga el datagrid , se pega( binding )
al dataset y se cierra la base de datos.
SQL
INSERT: INSERCIÓN O ADICIÓN DE
REGISTROS
Insertar o agregar registros o
renglones nuevos a una tabla en disco, es un proceso sencillo que
usa la siguiente instrucción sql:
INSERT INTO TABLA(CAMPO1,CAMPO2..)
VALUES(VALOR1,VALOR2..)
Recordar que solo se esta usando lo mínimo de
cada instrucción sql.
Prog26.aspx
<%@ PAGE LANGUAGE=VB%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<FORM RUNAT=SERVER>
CLAVE<ASP:TEXTBOX ID=CLAVE SIZE=3
RUNAT=SERVER/>
NOMBRE<ASP:TEXTBOX ID=NOMBRE SIZE=10
RUNAT=SERVER/>
EDAD<ASP:TEXTBOX ID=EDAD SIZE=3
RUNAT=SERVER/>
<ASP:BUTTON ONCLICK=INSERTAR TEXT=INSERTAR
RUNAT=SERVER /><BR>
<ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER
Width=400
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
EnableViewState=false/>
</FORM>
<script runat=server>
' creando y cargando coneccion, adpater, dataset como
variables globales
DIM coneccion AS OLEDBCONNECTION
DIM canal AS OLEDBDATAADAPTER
DIM tabla AS DATASET
SUB Page_Load(Sender As Object, E As
EventArgs)
coneccion = NEW
OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
' cargando el adapter con la instruccion sql
canal = NEW OLEDBDATAADAPTER("select * from mitabla",
coneccion)
' cargando el dataset
tabla = NEW DATASET()
canal.FILL(tabla, "mitabla")
' cargando el datagrid
TABLAGRID.DATASOURCE = tabla
TABLAGRID.DATAMEMBER = "mitabla"
TABLAGRID.DATABIND()
' cargando el nuevo textbox con la nueva clave clave
correpondiente
DIM cren, nvaclave AS INTEGER
cren = tabla.Tables("mitabla").Rows.Count
nvaclave = tabla.Tables("mitabla").Rows(cren-1)(0) +
1
CLAVE.Text=nvaclave
END SUB
SUB INSERTAR(Sender As Object, E As
EventArgs)
' creando y cargando un objeto OLEDBCOMMAND
' instruccion sql insert into mitabla(listacampos)
values(listadatos)
' @variable es una variable de tipo command o
parametro
DIM q AS STRING
DIM orden as OLEDBCOMMAND
q = "insert into mitabla(clave,nombre,edad)
values(@CLAVE, @NOMBRE, @EDAD)"
orden = NEW OLEDBCOMMAND(q, coneccion)
orden.Parameters.Add(new OleDbParameter("@CLAVE",
OleDbType.Integer))
orden.Parameters("@CLAVE").Value = CLAVE.Text
orden.Parameters.Add(new OleDbParameter("@NOMBRE",
OleDbType.VarWChar, 20))
orden.Parameters("@NOMBRE").Value =
NOMBRE.Text
orden.Parameters.Add(new OleDbParameter("@EDAD",
OleDbType.Integer))
orden.Parameters("@EDAD").Value = EDAD.Text
orden.Connection.Open()
orden.ExecuteNonQuery()
orden.Connection.Close()
' REFRESCANDO DATASET con los nuevos datos de la tabla
en disco
canal=new OleDbDataAdapter("select * from mitabla",
coneccion)
' creando el dataset y cargandolo
tabla= new DataSet()
canal.Fill(tabla, "mitabla")
' recargando el datagrid
TABLAGRID.DataSource=tabla.Tables("mitabla").DefaultView
TABLAGRID.DataBind()
' cargando otra vez la caja de CLAVE y limpiando las
otras cajas
DIM cren, nvaclave AS INTEGER
cren = tabla.Tables("mitabla").Rows.Count
nvaclave =tabla.Tables("mitabla").Rows(cren-1)(0)+
1
CLAVE.Text=nvaclave
NOMBRE.Text=""
EDAD.Text=""
coneccion.Close()
END SUB
</script>
corrida prog26.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Notas:
Se agregaron tres textboxs arriba del datagrid para
capturar los nuevos datos a insertar en la tabla.
En page_Load es el mismo código del programa
anterior solo al final se usa el método row.count de
dataset.tables[recuerdan la nota 8 del tema anterior] para
conocer cuantos renglones tiene la tabla.
Con esta información ya se puede leer la primera
columna ( la cero 0 desde luego) para sacar el dato de la ultima
clave.
Luego se lee el ultimo renglón de la tabla con el
método dataset.tables(tabla).rows(reng)(col).
Es importante que se entienda que con este formato
dataset.tables(tabla).rows(reng)(col) se puede leer o
cargar(GET-SET) cualquier celda o columna de la
tabla.
Se descontó uno de la cantidad de renglones
porque en tablas el primer renglón es
el…
El método devolvió el valor de la
última clave que esta en el último renglón
de la tabla, pero en string.
Al final se incremento en uno la variable entera para
obtener el valor de la nuevaclave o clavesiguiente, misma que se
cargo en el textbox correspondiente.
En función INSERTAR(), se crea la string q, con
el formato apropiado sql( como se dijo al principio de este
tema), observar que existen tres variables que llevan un @ antes,
estas variables se llaman VARIABLES PARAMETROS, y se cargan con
el objeto command.parameters().
Otra vez, en este ejemplo para mandar la
instrucción sql a la base de datos, se crea y se usa un
objeto command (llamado orden) que lleva como datos la string q y
la conexión, pero se agregan tres métodos
command.parametro (orden.parameters()), en estos métodos
se cargan las variables parámetro primero con el valor de
dato del textbox asp y luego se transforman al tipo de dato
apropiado usando los oledbtype(que hay que estudiar porque se
tienen que asociar directamente a los tipos de datos
que se usaron en access).
Ya con el objeto COMMAND(orden) listo y cargado para
comunicar la instrucción sql a la base de datos, se abre
la conexión a la base de datos se manda el
executenonquery(no se quiere regresar nada en esta parte,
recordar la nota respectiva que se dio en un tema anterior) y se
cierra la conexión y se mando el nuevo renglón a la
base de datos en disco.
Al final de esta función INSERTAR como ya se hizo
un cambio en la
base de datos, se tiene que volver a recargar el dataset con la
nueva información(es el mismo código que se tiene
en page_load) mas tantito código para limpiar y cargar los
textboxs.
En este tema se analiza la búsqueda de un
registro o
renglón determinado en este proceso el usuario del
programa quiere que se despliegue un y solo un registro de
información proporcionando un dato de búsqueda
generalmente la clave del registro.
La solución es sencilla, solo usar otra vez la
instrucción sql select con el siguiente
formato:
SELECT [ *, all, campos] FROM TABLA WHERE
clave=claveabuscar;
Código prog27.aspx
<%@ PAGE LANGUAGE=VB%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<FORM RUNAT=SERVER>
CLAVE A BUSCAR<ASP:TEXTBOX ID=CLAVE SIZE=3
RUNAT=SERVER/>
<ASP:BUTTON ONCLICK=BUSCAR TEXT=BUSCAR RUNAT=SERVER
/><BR>
<ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER
Width=400
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
EnableViewState=false
/></FORM>
<script runat=server>
' creando y cargando coneccion, adpater, dataset como
variables globales
DIM coneccion AS OLEDBCONNECTION
DIM canal AS OLEDBDATAADAPTER
DIM tabla AS DATASET
SUB BUSCAR(Sender As Object, E As EventArgs)
' cargando conecion
coneccion = NEW
OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
' reando y cargando canal con q y sus variables
parametros apropiadas
DIM q AS STRING
q = "select * from mitabla where clave =
@CLAVE"
canal=new OleDbDataAdapter(q, coneccion)
canal.SelectCommand.Parameters.Add(new
OleDbParameter("@CLAVE", OleDbType.Integer))
canal.SelectCommand.Parameters("@CLAVE").Value =
CLAVE.Text
' cargando el dataset
tabla = NEW DATASET()
canal.FILL(tabla, "mitabla")
' cargando el datagrid
TABLAGRID.DATASOURCE = tabla
TABLAGRID.DATAMEMBER = "mitabla"
TABLAGRID.DATABIND()
' cerrando conneccion recordar que FILL NO OCUPA
CERRAR
coneccion.CLOSE()
END SUB
</script>
Notas:
No hay nada nuevo es una combinación de los dos
programas anteriores con las mismas notas, solo se usa un textbox
asp para pedir la clave, aunque se puede usar cualquier campo
para buscar.
RECORDAR QUE TODO ESTE CAPITULO ES SIMPLEMENTES SQL y
las instrucciones o se mandan vía el DATAADAPTER o se
mandan vía el COMMAND, esto depende del problema a
resolver.
Corrida prog27.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú
superior
Otro problema similar al anterior es el de filtros es
decir en muchas ocasiones es necesario obtener información
acerca de un subconjunto de renglones de la tabla.
Por ejemplo todos los estudiantes que sean mayores de 17
años, todos los clientes que sean de Tijuana, etc., a esto
le llamamos filtros o condiciones.
También se resuelve de manera similar al
anterior, es decir usando la instrucción select etc., from
tabla, where CONDICION;
Código prog28.aspx
<%@ PAGE LANGUAGE=VB%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<FORM RUNAT=SERVER>
EDAD >= QUE<ASP:TEXTBOX ID=EDAD SIZE=3
RUNAT=SERVER/>
<ASP:BUTTON ONCLICK=BUSCAR TEXT=BUSCAR RUNAT=SERVER
/><BR>
<ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER
Width=400
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
EnableViewState=false
/></FORM>
<script runat=server>
' creando y cargando coneccion, adpater, dataset como
variables globales
DIM coneccion AS OLEDBCONNECTION
DIM canal AS OLEDBDATAADAPTER
DIM tabla AS DATASET
SUB BUSCAR(Sender As Object, E As EventArgs)
' cargando conecion
coneccion = NEW
OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
' creando y cargando canal con q y sus variables
parametros apropiadas
DIM q AS STRING
q = "select * from mitabla where edad >=
@EDAD"
canal=new OleDbDataAdapter(q, coneccion)
canal.SelectCommand.Parameters.Add(new
OleDbParameter("@EDAD", OleDbType.Integer))
canal.SelectCommand.Parameters("@EDAD").Value =
EDAD.Text
' cargando el dataset
tabla = NEW DATASET()
canal.FILL(tabla, "mitabla")
' cargando el datagrid
TABLAGRID.DATASOURCE = tabla
TABLAGRID.DATAMEMBER = "mitabla"
TABLAGRID.DATABIND()
' cerrando conneccion recordar que FILL NO OCUPA
CERRAR
coneccion.CLOSE()
END SUB
</script>
Nota: siguen siendo combinaciones de los programas
anteriores pero seria prudente mejor usar dos combobox uno para
la variable, otro para el operador relacional y un text para el
dato y mandar estos tres datos al prog28.aspx (se ocupan varios
command.parameters()), pero eso queda de tarea.
Recordar también que bases de datos en microsoft
net es solamente SQL SQL SQL y se han usado tres versiones de
select, por ejemplo si se usa en un programa:
SELECT column1, SUM(column2)
FROM "list-of-tables"
ORDER BY "column-list" [ASC | DESC];
[ ] = optional
Corrida prog28.aspx
Para ver el
gráfico seleccione la opción "Descargar" del
menú superior
SQL
UPPADTE: OPERACIONES CON CAMPOS
Este es también un caso común con
elementos de una tabla, sin embargo es también
fácil de resolver.
Es necesario recordar primero algunas cosas
elementales:
1.- Recordar que el numero de columna en una tabla
empieza en 0, esto es que para realizar alguna operación
por ejemplo la columna edad del ejemplo que estamos siguiendo, su
numero de columna es la 2.
2.- La operación que se plantee se puede realizar
con todos los renglones de la tabla o con un solo renglón
de la tabla(del dataset), para procesar todos los renglones se
usa un ciclo for, si solo se quiere procesar un solo
renglón o una celda o columna nada mas, solo recordar
GET-SET y solo usar un tabla.tables.rows(r)(c) con los
métodos strings apropiados.
3.- Para realizar aritmética con toda una
columna, solo usar el GET-SET de tabla.tables.rows(ren)(col) para
leer(get)o cargar(set), en leer recordar que saldra una string y
en cargar recordar que se tendrá que cargar también
una string, otra vez;
string alfa=tabla.Tables("Clientes").Rows(4)(5)
–>carga como string la variable alfa con el dato que se tiene
en la sexta columna del quinto renglón de la tabla
clientes.
tabla.Tables("alumnos").Rows(2)(3)="MAMA" –> carga
con la string MAMA la cuarta columna del tercer rennglon de la
tabla alumnos.
5.- En el ejemplo se realiza la operación con
todos los renglones de la tabla y no olvidar que se tiene que
usar la instrucción sql Update para que la nueva
información se actualice en disco, recordar que los
cambios que se hacen a la tabla, es realmente al dataset, que a
su vez es una tabla o base de datos en la memoria de la maquina
del cliente o usuario, y estos cambios hay que actualizarlos o
pasarlos o UPDATE a la base de datos en disco.
El siguiente programa le aumenta 50 a todas las
edades.
Prog29.aspx
<%@ PAGE LANGUAGE=VB%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<FORM RUNAT=SERVER>
<ASP:BUTTON ONCLICK=SUMAR TEXT=EDAD+50 RUNAT=SERVER
/><BR>
<ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER
Width=400
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
EnableViewState=false
/></FORM>
<script runat=server>
' creando y cargando coneccion, adpater, dataset,
command
' como variables globales
DIM coneccion AS OLEDBCONNECTION
DIM canal AS OLEDBDATAADAPTER
DIM tabla AS DATASET
DIM orden AS OLEDBCOMMAND
SUB Page_Load(Sender As Object, E As
EventArgs)
' enlazando coneccion a la base de datos
coneccion = NEW
OLEDBCONNECTION("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
' cargando el adapter con la instruccion sql
canal = NEW OLEDBDATAADAPTER("select * from mitabla",
coneccion)
' cargando el dataset
tabla = NEW DATASET()
canal.FILL(tabla, "mitabla")
' cargando el datagrid
TABLAGRID.DATASOURCE = tabla
TABLAGRID.DATAMEMBER = "mitabla"
TABLAGRID.DATABIND()
' cerrando conneccion
coneccion.CLOSE()
END SUB
SUB SUMAR(Sender As Object, E As EventArgs)
' variables a usar
DIM q AS STRING
DIM temp, r, cren, nvaclave AS INTEGER
' procesando el dataset
cren = tabla.Tables("mitabla").Rows.Count
FOR r = 0 TO cren-1
' cargando clave del renglon actual a procesar
(get-set)
nvaclave =tabla.Tables("mitabla").Rows(r)(0)
' pasando columna edad a variable temp
(get-set)
temp =tabla.Tables("mitabla").Rows(r)(2)
'sumando 50 a la edad(temp)
temp = temp + 50
' cargando la nueva edad en el dataset
(get-set)
tabla.Tables("mitabla").Rows(r)(2)= temp
' pasando dataset a disco con update
q = "UPDATE mitabla SET edad =
"&temp.ToString()&" where clave=
"&nvaclave.ToString()
orden = new OleDbCommand(q, coneccion)
orden.Connection.Open()
orden.ExecuteNonQuery()
orden.Connection.Close()
'termina for y empieza nuevo renglon
NEXT R
'refrescando el datagrid
TABLAGRID.DataSource = tabla
TABLAGRID.DataMember= "mitabla"
TABLAGRID.DataBind()
END SUB
</script>
nota: como se observa se puede construir directamente la
string q, y no usar command.parameters(), si se esta muy seguro que los
tipos de datos que se mandan a disco son los apropiados para
access.
Corrida prog29.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
SQL
DELETE: BAJA O ELIMINACION
Eliminación es otro proceso simple y común
con las bases de datos el modelo con ADO.NET que estamos usando
hace este tipo de operaciones muy fáciles:
La instrucción sql a usar es: DELETE FROM TABLA
WHERE CONDICION
Prog30.aspx
<%@ PAGE LANGUAGE=VB %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<FORM RUNAT=SERVER>
CLAVE A BORRAR<ASP:TEXTBOX ID=CLAVE SIZE=3
RUNAT=SERVER/>
<ASP:BUTTON ONCLICK=BORRAR TEXT=BORRAR RUNAT=SERVER
/><BR>
<ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER
Width=400
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
EnableViewState=false />
</FORM>
<script runat=server>
DIM coneccion AS OleDbConnection
DIM tabla AS DataSet
DIM canal AS OleDbDataAdapter
DIM orden AS OleDbCommand
SUB Page_Load(Sender as Object, E as EventArgs
)
coneccion = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
canal = new OleDbDataAdapter("select * from mitabla",
coneccion)
tabla = new DataSet()
canal.Fill(tabla, "mitabla")
TABLAGRID.DataSource = tabla
TABLAGRID.DataMember = "mitabla"
TABLAGRID.DataBind()
END SUB
SUB BORRAR (Sender as Object, E as EventArgs)
DIM q AS STRING
' instruccion sql DELETE FROM TABLA WHERE
CLAVE=DATO
q = "delete from mitabla where clave=@CLAVE"
orden= new OleDbCommand(q, coneccion)
orden.Parameters.Add(new OleDbParameter("@CLAVE",
OleDbType.Integer))
orden.Parameters("@CLAVE").Value = CLAVE.Text
orden.Connection.Open()
orden.ExecuteNonQuery()
orden.Connection.Close()
' REFRESCANDO DATASET
canal = new OleDbDataAdapter("select * from mitabla",
coneccion)
tabla = new DataSet()
canal.Fill(tabla, "mitabla")
TABLAGRID.DataSource=tabla.Tables("mitabla").DefaultView
TABLAGRID.DataBind()
CLAVE.Text=""
END SUB
</script>
corrida prog30.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
CUIDAR Y MEJOR VALIDEN EN PROGRAMA QUE LA CLAVE A BORRAR
EXISTA EN EL DATASET O TENDRAN UN ERROR DE SQL Y MAS IMPORTANTE
AUN SE TENDRA QUE RESETEAR EL SERVIDOR, ESTO LO NOTARAN CUANDO
ENCUENTREN CON EL FTP UN ARCHIVO EN SU
DIRECTORIO LLAMADO MIBASE.LDB QUE NO LO PODRAN ELIMINAR HASTA QUE
YO RESETEE EL SERVIDOR ESTAN AVISADOS.
SQL
UPDATE: EDICIÓN DE REGISTROS
Editar registros significa cambiar el contenido de
algunos de los campos o columnas por nueva información o
para corregir algún error de captura original o para
agregar alguna columna que no existía por
modificación de la tabla o la base de datos.
En general se tiene otro problema de sql UPDATE, sin
embargo ahora se aprovechan algunos elementos nuevos del objeto
datagrid, como son la capacidad que tiene de crearle columnas de
edición
a los renglones que muestra el
dataset, estas columnas de edición traen sus propios
métodos, mismos que se pueden cargar con código
para procesar.
Prog31.aspx
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<HTML>
<script language=VB runat=server>
DIM coneccion As OleDbConnection=new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
SUB Page_Load(Sender as Object, E as
EventArgs)
' solo para cuando se carga por primera vez la
forma
if NOT IsPostBack Then
DespTabla()
end if
END SUB
SUB DespTabla()
DIM canal as OleDbDataAdapter
canal = new OleDbDataAdapter("select * from mitabla",
coneccion)
DIM tabla as DataSet
tabla = new DataSet()
canal.Fill(tabla, "mitabla")
TABLAGRID.DataSource=tabla
TABLAGRID.DataMember="mitabla"
TABLAGRID.DataBind()
END SUB
SUB DataGrid_Edit(Sender as Object, E as
DataGridCommandEventArgs)
' cargando el renglon donde se pidio la
edicion
TABLAGRID.EditItemIndex = E.Item.ItemIndex
DespTabla()
END SUB
SUB DataGrid_Cancel(Sender as Object, E as
DataGridCommandEventArgs)
'para cancelar solo poner edititemindex en -1 (ningun
renglon)
TABLAGRID.EditItemIndex = -1
DespTabla()
END SUB
SUB DataGrid_Update(Sender as Object, E as
DataGridCommandEventArgs)
DIM q AS STRING
q = "UPDATE mitabla SET clave= @CLAVE, nombre= @NOMBRE,
edad = @EDAD where clave= @CLAVE"
DIM orden AS OleDbCommand
orden = new OleDbCommand(q, coneccion)
orden.Parameters.Add(new OleDbParameter("@CLAVE",
OleDbType.Integer))
orden.Parameters.Add(new OleDbParameter("@NOMBRE",
OleDbType.VarWChar, 20))
orden.Parameters.Add(new OleDbParameter("@EDAD",
OleDbType.Integer))
' cargando textbox de clave con el valor de la
clave
orden.Parameters("@CLAVE").Value =
TABLAGRID.DataKeys(E.Item.ItemIndex)
' creando y cargando los demas textboxs
DIM nomcajas()= {"@CLAVE","@NOMBRE","@EDAD"}
DIM i AS Integer
FOR i=1 to 3
DIM datocajas AS STRING
Dim micaja As TextBox
micaja = CType(E.Item.Cells(I).Controls(0),
TextBox)
datocajas = micaja.Text
orden.Parameters(nomcajas(i-1)).Value =
Server.HtmlEncode(datocajas)
NEXT i
orden.Connection.Open()
orden.ExecuteNonQuery()
'poniendo otra vez el datagrid en nada
TABLAGRID.EditItemIndex = -1
orden.Connection.Close()
DespTabla()
END SUB
</script>
<body style="font: 10pt verdana">
<form runat="server">
<h3><font face="Verdana">EDICION O
ACTUALIZACION DE REGISTROS</font></h3>
<span id="Message" EnableViewState="false"
style="font: arial 11pt;" runat="server"/><p>
<ASP:DataGrid id="TABLAGRID"
runat="server"
Width="400"
BackColor="#ccccff"
BorderColor="black"
ShowFooter="false"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
OnEditCommand="DataGrid_Edit"
OnCancelCommand="DataGrid_Cancel"
OnUpdateCommand="DataGrid_Update"
DataKeyField="clave"
>
<Columns>
<asp:EditCommandColumn EditText="Edit"
CancelText="Cancel" UpdateText="Update"
ItemStyle-Wrap="false"/>
</Columns>
</ASP:DataGrid>
</form>
</body>
</html>
Para entender el código veamos la corrida
completa:
Pantalla uno prog31.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Observar que ahora el datagrid incluye una columna de
edición especial, revisar la parte del código de
propiedades del datagrid en el programa y las nuevas propiedades
que se le agregaron.
Pantalla dos prog31.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Observar que la columna de edición del
renglón seleccionado (clic en edit de cualquier
renglón) ahora tiene dos opciones (update y cancel) y el
renglón de edición se convirtió en puros
textbox (ya se modificaron algunos valores),
update y cancel tienen su propio código en el programa,
revisarlo y usando opción update se tiene
ahora;
Pantalla tres prog31.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Un registro editado o modificado en visual basic net ,
analizar con cuidado el codigo del
programa, que esta documentado, suerte
Campos de gráficos o de imágenes,
se han convertido en elementos importantes de cualquier base de
datos.
Para manejar este elemento con ado asp net existen dos
maneras:
1.- Agregar un campo BLOB a la tabla en microsoft
access y usar componentes asp net especializados en
imágenes tanto para subirlas como para desplegar la
imagen.
Este método provoca que la base de datos crezca
mucho recordar que una imagen aun de tipo jpg ocupa mucho
espacio.
2.- El segundo método es mas sencillo, primero
subir las imágenes ( de preferencia jpg ) con un ftp
normal a tusitio y después agregar un objeto asp net
imageurl en el programa y además agregar un campo de
texto llamado
fotourl o foto a la tabla en microsoft access y grabar la
dirección http de la imagen
en este campo, por ejemplo
http://programacionfacil.com/tusitio/pato.jpg aunque si estan
juntos el aspx y el jpg se puede usar solo pato.jpg
directamente.
Después solo cargar este objeto asp net imageurl
en la pagina que se construirá que no es otra cosa que el
programa de búsqueda con el despliegue del campo extra,
como lo muestra el programa ejemplo.
Prog32.aspx
<%@ PAGE LANGUAGE=VB %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb"
%>
<FORM RUNAT=SERVER>
CLAVE A BUSCAR<ASP:TEXTBOX ID=CLAVE SIZE=3
RUNAT=SERVER/>
<ASP:BUTTON ONCLICK=BUSCAR TEXT=BUSCAR RUNAT=SERVER
/><BR>
<ASP:IMAGE ID=FOTO IMAGEURL=" "
RUNAT=SERVER/>
<ASP:DATAGRID ID=TABLAGRID RUNAT=SERVER
Width=400
BackColor=#ccccff
BorderColor=black
ShowFooter=false
CellPadding=3
CellSpacing=0
Font-Name=Verdana
Font-Size=8pt
HeaderStyle-BackColor=#aaaadd
EnableViewState=false
/>
</FORM>
<html>
<script runat=server>
'creando y cargando la coneccion a la base de datos
variable global
DIM coneccion AS OleDbConnection=new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:progfaciltusitiomibase.mdb")
SUB BUSCAR (Sender As Object,E as EventArgs)
DIM q AS String
q = "select * from mitabla where clave =
@CLAVE"
DIM canal as OleDbDataAdapter = new OleDbDataAdapter(q,
coneccion)
canal.SelectCommand.Parameters.Add(new
OleDbParameter("@CLAVE", OleDbType.Integer))
canal.SelectCommand.Parameters("@CLAVE").Value =
CLAVE.Text
DIM tabla as DataSet = new DataSet()
canal.Fill(tabla, "mitabla")
TABLAGRID.DataSource=tabla
TABLAGRID.DataMember="mitabla"
TABLAGRID.DataBind()
'cargando el objeto imageurl
FOTO.ImageUrl=tabla.Tables("mitabla").Rows(0)(3).ToString()
END SUB
</script>
</html>
corrida: prog32.aspx
Para ver el gráfico seleccione la
opción "Descargar" del menú
superior
Recordar que para que no salga el campo fotourl en el
datagrid el select de sql puede pedirse como select campo1,
campo2, campo.. from mitabla etcétera.
Y el objeto IMAGE de visual basic net tiene muchas
propiedades usenlas.
GLORIA ALVITES