Clase
UNIDAD N 2:
TEMAS:
Acceso a una Base
de Datos con
[Link].
Altas, Bajas, Modificaciones
y Consultas de varias tablas.
Objetivos:
Conexin al servidor de base de datos SQL Server.
Configuracin de la componente SqlDataSource.
Altas, Bajas, Modificaciones y consultas de varias
tablas.
Introduccin
En la mayoras de los problemas se requiere el acceso a varias
tablas del gestor de base de datos. Algunas las accedemos para consultar,
mientras a otras las modificamos o cargamos datos.
Seguiremos trabajando con el gestor de base de datos SQL Server.
ABM.
Continuamos con la base de datos que creamos en la clase anterior en
SQL Server llamada: administracin y dentro de la misma crearemos ahora
dos nuevas tablas:
Tabla: articulos
codigo
int Clave primaria e identidad.
descripcion
varchar(50)
precio
float
codigorubro
int
Tabla: rubros
Codigo
int Clave primaria e identidad
descripcin
varchar(50)
Crearemos un sitio web en el Visual Studio 2008 llamado abm2.
La primer pgina solo tendr los hipervnculos a otras pginas que tendrn
por objetivo efectuar una el alta de articulos, otra la baja, otra las
modificaciones y por ltimo otra la consulta.
Desde la herramienta que utilizamos para crear la base de datos y las
tablas procedemos a cargar algunos rubros en forma manual (esto nos
permitir entrar de lleno en los algoritmos que requieren trabajar con las
dos tablas)
Para crear esta interface insertaremos cuatro objetos de la clase HyperLink,
como mnimo debemos inicializar las propiedades text (es el texto que
mostrar el hipervnculo en el navegador y la propiedad NavigateUrl que
indica el nombre de la pgina que debe cargar el navegador cuando se
presione el hipervnculo)
Instituto Superior Santo Domingo
Pgina 1 de 9
Como todava no tenemos creada las otras cuatro pginas no podemos
inicializar la propiedad NavigateUrl de cada HyperLink.
Como segundo paso creemos las cuatro pginas, para ello desde el men:
Archivo -> Nuevo archivo seleccionamos la plantilla Web Forms y en la
parte inferior definimos el nombre del archivo aspx.
Los nombres de las cuatro pginas a crear sern:
[Link]
[Link]
[Link]
[Link]
Una vez que hemos creado las cuatro pginas aspx podemos proceder a
enlazar la propiedad NavigateUrl de cada control HyperLink.
Cuando seleccionamos la propiedad NavigateUrl aparece un dialogo que
nos permite seleccionar la pgina aspx a enlazar.
Una vez inicializada la propiedad NavigateUrl podremos ver que el texto
aparece subrayado (indicando que se trata de un hipervnculo):
Altas.
Activemos desde el Visual Studio 2008 la pestaa [Link] para
elaborar la interface visual que nos permita efectuar la carga de datos de
artculos:
Como podemos ver disponemos dos controles de tipo TextBox, un control
de tipo DropDownList el cual nos permitir seleccionar el rubro que
pertenece el articulo que estamos cargando
Disponemos un objeto de la clase Button y una Label donde mostraremos
un mensaje si el alta se efectu correctamente.
Instituto Superior Santo Domingo
Pgina 2 de 9
Por ltimo disponemos un objeto de la clase HyperLink configurando la
propiedad NavigateUrl con la direccin de la pgina principal ([Link])
Conexin con la base de datos.
Utilizaremos la misma conexin que creamos en la clase anterior. Si desde
el Visual Estudio activamos la pestaa Explorador de servidores veremos
que est presente la conexin con la base de datos administracin.
Ahora podemos empezar con el alta de artculos.
Del cuadro de herramientas seleccionamos un control de la clase
SqlDataSource (tener en cuenta que est en el grupo Datos y no en el
grupo Estndar)
Ahora podemos ver que nuestro formulario tiene un componente llamado
SqlDataSource1 que es de la clase SqlDataSource.
Ahora modificaremos el nombre de este objeto (SqlDataSource1) por
SqlDataSourceRubros.
Este primer SqlDataSource nos permitir rescatar los datos de los rubros
(codigo y descripcin) y poblar el control DropDownList.
Seleccionamos el control SqlDataSourceRubros del formulario y en la
ventana de Propiedades inicializamos la propiedad ConnectionString con
el valor que aparece al presionar la pestaa de la derecha (bsicamente es
la cadena de conexin que creamos anteriormente)
Ahora nos queda configura la propiedad SelectQuery con el comando SQL
que nos permite recuperar todas las filas de la tabla rubros.
La propiedad SelectQuery nos abre una ventana de dilogo donde
debemos configurar el comando SELECT:
select codigo,descripcion from rubros
Una vez hecho esta configuracin procedemos a codificar el enlace entre el
DropDonwList1 y el SqlDataSourceRubros en el evento Load de la pgina:
Partial Class altaarticulos
Inherits [Link]
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As [Link]) Handles [Link]
If [Link] = False Then
[Link] =[Link]
[Link] = "descripcion"
[Link] = "codigo"
[Link]()
End If
End Sub
End Class
La propiedad IsPostBack de la pgina almacena false la primera vez que
solicitamos la pgina desde el navegador, de ah en ms cada vez que
presionamos un botn de la pgina (Alta por ejemplo) la propiedad
IsPostBack almacena true.
Con esta condicin logramos que la carga del control DropDownList1 se
ejecute solo la primera vez que solicitamos la pgina.
Instituto Superior Santo Domingo
Pgina 3 de 9
Debemos inicializar tres propiedades del control DropDownList para cargar
los datos de los rubros. La propiedad DataSource la inicializamos con la
referencia a nuestro objeto SqlDataSourceRubros. Las propiedades
DataTextField y DataValueField deben inicializarse con los nombres de las
columnas de la tabla rubros que deben visualizarse y seleccionarse en el
control. Por ltimo llamamos al mtodo DataBind para que se genere el
HTML del control.
.
Ahora procedemos a agregar un segundo objeto de la clase SqlDataSource
que nos permitir actualizar la tabla artculos.
Seleccionamos el control SqlDataSource1 del formulario y le asignamos un
nombre ms significativo (SqlDataSourceArticulos) y en la ventana de
Propiedades inicializamos la propiedad ConnectionString con el valor que
aparece al presionar la pestaa de la derecha.
Ahora nos queda configura la propiedad InsertQuery con el comando SQL
que nos permite insertar un registro en una tabla.
La propiedad InsertQuery nos abre una ventana de dilogo donde debemos
configurar el comando INSERT:
Decamos en la clase anterior que este dilogo es muy importante ingresar
correctamente el comando SQL parametrizando los valores que sern
remplazados en tiempo de ejecucin con los datos que cargue el operador.
Los parmetros se indican con un nombre antecedindole el carcter @.
Luego de crear completamente el comando Insert procedemos a presionar
el botn Actualizar parmetros.
Si queremos comprobar si nuestro comando SQL est correcto
presionamos el botn Generador de consultas y desde este nuevo
dilogo presionamos el botn Ejecutar consulta:
Lo que no hay que olvidarse nunca es que cada vez que agregamos o
borramos un parmetro de nuestro comando SQL es presionar el botn
Actualizar parmetros.
Instituto Superior Santo Domingo
Pgina 4 de 9
Ahora codificamos el evento clic del botn de alta:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As _
[Link]) Handles [Link]
Try
[Link]("descripcion") _
.DefaultValue = [Link]
[Link]("precio") _
.DefaultValue = [Link]
[Link]("codigorubro") _
.DefaultValue = [Link]
[Link]()
[Link] = "Se efectu la carga"
Catch ex As Exception
[Link] = [Link]
End Try
End Sub
Lo primero que debemos hacer es importar el espacio de nombres donde
se encuentra definida la clase SqlException:
Imports [Link]
Al presionar el botn inicializamos los tres parmetros del comando SQL
que hemos configurado en el SqlDataSource. Para acceder a dichos
parmetros disponemos de la propiedad InsertParameters que le indicamos
como subndice el nombre del parmetro.
Lo que difiere de la clase anterior es la inicializacin del parmetro
codigorubro con el valor que rescatamos de la propiedad SelectedValue
del control DropDownList1
Luego de inicializar los tres parmetros procedemos a llamar al mtodo
Insert de la clase SqlDataSource.
Todo esto lo hacemos capturando la excepcin SQLException.
Consultas.
Seleccionamos
del
Explorador
de
soluciones
la
pgina
[Link] y procedemos a elaborar la siguiente interface visual
(disponemos un TextBox, un Button, una Label, un HyperLink y un
SqlDataSource):
Configuramos el SqlDataSource1, luego de seleccionarlo con el mouse
modificamos la propiedad ConnectionString (con la conexin creada
Instituto Superior Santo Domingo
Pgina 5 de 9
anteriormente) y en el dilogo que abre la propiedad SelectQuery
procedemos a codificar el comando select:
select [Link] as descriarticulo,
precio,
[Link] as descrirubro
from articulos as ar
join rubros as ru on [Link]=[Link]
where [Link]=@codigo
Es decir recuperamos la descripcin del artculo, su precio y la descripcin
del rubro de la otra tabla (recordar de presionar el botn Actualizar
parmetros)
El cdigo del evento click es:
Imports [Link]
Partial Class consultaarticulos
Inherits [Link]
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As [Link]) Handles [Link]
Try
[Link]("codigo").DefaultValue = _
[Link]
[Link] = _
[Link]
Dim datos As SqlDataReader
datos = _
[Link]([Link])
If [Link] Then
[Link] = "Descripcion:" & _
datos("descriarticulo") & "<br>" & _
"Precio:" & datos("precio") & "<br>" & _
"Rubro:" & datos("descrirubro")
Else
[Link] = "No existe un artculo con dicho cdigo"
End If
Catch ex As Exception
[Link] = [Link]
End Try
End Sub
End Class
Para poder recuperar los datos mediante un objeto de la clase
SqlDataReader debemos configurar el SqlDataSource indicando a la
propiedad DataSourceMode el siguiente valor:
[Link] = [Link]
Ahora cuando llamemos al mtodo select del SqlDataSource lo hacemos
con la siguiente sintaxis:
Dim datos As SqlDataReader
datos = [Link]([Link])
Luego recorremos el SqlDataReader (como este caso puede retornar cero
o una fila lo hacemos mediante un if):
If [Link] Then
Si el mtodo Read retorna true luego podemos acceder a la fila recuperada
con el select.
Instituto Superior Santo Domingo
Pgina 6 de 9
Bajas.
Seleccionamos del Explorador de soluciones la pgina [Link] y
procedemos a elaborar la siguiente interface visual:
Inicializamos la propiedad ConnectionString del SqlDataSource1 con la
conexin que habamos creado e inicializamos la propiedad DeleteQuery.
Luego el cdigo a ejecutar cuando se presiona el botn Borrar de la
pgina es:
Imports [Link]
Partial Class bajaarticulos
Inherits [Link]
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As
[Link]) Handles [Link]
Try
[Link]("codigo").DefaultValue = _
[Link]
Dim cant As Integer
cant = [Link]
If cant = 1 Then
[Link] = "Se borr el artculo"
Else
[Link] = "No existe el codigo"
End If
Catch ex As Exception
[Link] = [Link]
End Try
End Sub
End Class
Procedemos a inicializar el parmetro y luego llamamos al mtodo Delete
del SqlDataSource. El mtodo Delete retorna un entero y representa la
cantidad de filas borradas de la tabla.
Modificaciones.
Por ltimo implementaremos la modificacin de datos. Seleccionamos del
Explorador de soluciones la pgina [Link] y
procedemos a elaborar la siguiente interface visual:
Instituto Superior Santo Domingo
Pgina 7 de 9
Para efectuar la modificacin de datos de un artculo procederemos primero
a la bsqueda de los datos actuales. Esto hace que necesitemos un primer
control de tipo SqlDataSource (que llamamos SqlDataSourceArticulos).
El primer SqlDataSource nos permite consultar los datos de un artculo por
su cdigo y mostrar el resultado en dos controles de tipo TextBox y en un
control de tipo DropDownList el rubro que pertenece.
Para inicializar el DropDownList debemos crear un segundo SqlDataSource
(SqlDataSourceRubros)
El SqlDataSourceArticulos debemos configurar las propiedades:
- ConnectionString.
- SelectQuery
select * from articulos
where codigo=@codigo:
- UpdateQuery
update articulos set descripcion=@descripcion,
precio=@precio,
codigorubro=@codigorubro
where codigo=@codigo
El SqlDataSourceRubros debemos configurar las propiedades:
- ConnectionString.
- SelectQuery
select * from rubros
Luego el cdigo para los eventos click de los dos botones es:
Imports [Link]
Partial Class modificacionarticulos
Inherits [Link]
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As [Link]) Handles [Link]
Instituto Superior Santo Domingo
Pgina 8 de 9
Try
[Link]("codigo"). _
DefaultValue = [Link]
[Link] = _
[Link]
Dim datos As SqlDataReader
datos = SqlDataSourceArticulos. _
Select([Link])
If [Link] Then
[Link] = datos("descripcion")
[Link] = datos("precio")
[Link] = Me.SqlDataSource1Rubros
[Link] = "descripcion"
[Link] = "codigo"
[Link] = datos("codigorubro")
[Link]()
Else
[Link] = "No existe un artculo con dicho cdigo"
End If
Catch ex As Exception
[Link] = [Link]
End Try
End Sub
Protected Sub Button2_Click(ByVal sender As Object, _
ByVal e As [Link]) Handles [Link]
Try
[Link]("descripcion") _
.DefaultValue = [Link]
[Link]("precio") _
.DefaultValue = [Link]
[Link]("codigorubro") _
.DefaultValue = [Link]
[Link]("codigo") _
.DefaultValue = [Link]
Dim cant As Integer
cant = [Link]
If cant = 1 Then
[Link] = "Datos modificados"
Else
[Link] = "No existe un artculo con dicho codigo"
End If
[Link]()
Catch ex As Exception
[Link] = [Link]
End Try
End Sub
End Class
Instituto Superior Santo Domingo
Pgina 9 de 9