- Clases SQLConnection y SQLCommand (ABM - Altas, Bajas y Modificaciones)


Conceptos.

Con ASP.Net podemos comunicarnos a distintos gestores de base de datos como pueden ser SQL Server, Oracle, Access, MySQL etc.
Nosotros trabajaremos con el gestor de base de datos SQL Server, uno por ser el más empleado cuando se utiliza la tecnología de ASP.Net en el desarrollo de sitios web dinámicos.
En esta clase especificaremos todo el código necesario para acceder al gestor de base de datos, desde la cadena de conexión hasta la implementación de los comandos SQL a enviar.

ABM (Altas, Bajas y Modificaciones)

Crearemos una base de datos en SQL Server llamada: administración y dentro de la misma definiremos una tabla llamada usuarios con tres campos:

 
nombre  varchar(30)   Clave primaria
clave	varchar(30)
mail varchar(30)

Crearemos un sitio web en el Visual Studio 2008 llamado abm1.
La primer página solo tendrá los hipervínculos a otras páginas que tendrán por objetivo efectuar una el alta de usuarios, otra la baja, otra las modificaciones y por último otra la consulta:


Para crear esta interface insertaremos cuatro objetos de la clase HyperLink, como mínimo debemos inicializar las propiedades text (es el texto que mostrará el hipervínculo en el navegador y la propiedad NavigateUrl que indica el nombre de la página que debe cargar el navegador cuando se presione el hipervínculo)
Como todavía no tenemos creada las otras cuatro páginas no podemos inicializar la propiedad NavigateUrl de cada HyperLink.

Como segundo paso creemos las cuatro páginas, 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 páginas a crear serán:

altausuario.aspx
consultausuario.aspx
bajausuario.aspx
modificacionusuario.aspx

Una vez que hemos creado las cuatro páginas 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 página aspx a enlazar.
Una vez inicializada la propiedad NavigateUrl podremos ver que el texto aparece subrayado (indicando que se trata de un hipervínculo)

Definición de la cadena de conexión con la base de datos en el archivo web.config

Web.config es el archivo principal de opciones de configuración para una aplicación web en ASP.NET.
El archivo es un documento XML que define información de configuración concerniente a la aplicación web. El archivo web.config contiene información que controla la carga de módulos, configuraciones de seguridad, configuraciones del estado de la sesión, opciones de compilación y el lenguaje de la aplicación.
El archivo web.config contiene también la cadenas de conexión a la base de datos.
Debemos modificar la sección:

<connectionStrings/>

y remplazarlo por:

<connectionStrings>
<add name="administracion" 
     connectionString="Data Source=(local);Initial Catalog=administracion;Integrated Security=SSPI;"/>
</connectionStrings>

Como vemos en la propiedad connectionString indicamos en Initial Catalog el nombre de la base de datos que hemos creado en SQL Server.

Altas

Activemos desde el Visual Studio 2008 la pestaña altausuario.aspx para elaborar la interface visual que nos permita efectuar la carga de datos de usuarios:


Como podemos ver disponemos tres controles de tipo TextBox, el que solicita el ingreso de la clave modificamos la propiedad TextMode con el valor Password, los otros dos los dejamos con el valor SingleLine.
Disponemos un objeto de la clase Button y una Label donde mostraremos un mensaje si el alta se efectuó correctamente.
Por último disponemos un objeto de la clase HyperLink configurando la propiedad NavigateUrl con la dirección de la página principal (Default.aspx)

Ahora codificamos el evento clic del botón de alta:

Imports System.Data.SqlClient

Partial Class altausuario
    Inherits System.Web.UI.Page

  Protected Sub Button1_Click(ByVal sender As Object, _
              ByVal e As System.EventArgs) Handles Button1.Click
      Try
            Dim s As String
            s = ConfigurationManager.ConnectionStrings("administracion").ConnectionString
            Dim conexion As New SqlConnection(s)
            conexion.Open()
            Dim comando As New SqlCommand("insert into usuarios(nombre,clave,mail) values('" _
              & Me.TextBox1.Text & "','" & Me.TextBox2.Text & "','" _
              & Me.TextBox3.Text & "')", conexion)
            comando.ExecuteNonQuery()
            Me.Label1.Text = "Se registró el usuario"
            conexion.Close()
      Catch ex As SqlException
            Me.Label1.Text = ex.Message
      End Try
  End Sub
End Class

Lo primero que debemos hacer es importar el espacio de nombres donde se encuentra definida la clase SqlException:

Imports System.Data.SqlClient

Al presionar el botón, primero extraemos la cadena de conexión que tenemos almacenada en el archivo web.config:

            s = ConfigurationManager.ConnectionStrings("administracion").ConnectionString

Creamos un objeto de la clase SQLConnection indicando como parámetro la cadena de conexión que rescatamos anteriormente:

       	Dim conexion As New SqlConnection(s)

Abrimos la conexión:

conexion.Open()

Creamos un objeto de la clase SqlCommand creándolo con los datos cargados en los controles TextBox:

     Dim comando As New SqlCommand("insert into usuarios(nombre,clave,mail) values('" _
         & Me.TextBox1.Text & "','" & Me.TextBox2.Text & "','" _
         & Me.TextBox3.Text & "')", conexion)

Pedimos a SQL Server que ejecute el comando especificado anteriormente:

        comando.ExecuteNonQuery()

Cerramos la conexión:

        conexion.Close()

Todo esto lo hacemos capturando la excepción SQLException.
En caso de dispararse un error será capturado por el Catch y procederemos a mostrar en una Label el mensaje de error respectivo:

      Catch ex As SqlException
            Me.Label1.Text = ex.Message
      End Try

Consultas

Seleccionamos del Explorador de soluciones la página consultausuario.aspx y procedemos a elaborar la siguiente interface visual (disponemos un TextBox, un Button, una Label y un HyperLink:


El código del evento click es:

Imports System.Data.SqlClient

Partial Class consultausuario
    Inherits System.Web.UI.Page

  Protected Sub Button1_Click(ByVal sender As Object, _ 
          ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim s As String
            s = ConfigurationManager.ConnectionStrings("administracion").ConnectionString
            Dim conexion As New SqlConnection(s)
            conexion.Open()
            Dim comando As New SqlCommand("select nombre,clave,mail from usuarios " _
              & " where nombre='" & Me.TextBox1.Text & "'", conexion)
            Dim registro As SqlDataReader = comando.ExecuteReader
            If registro.Read Then
               Me.Label1.Text = "Clave:" & registro("clave") & "<br>" _
                               & "Mail:" & registro("mail")
            Else
               Me.Label1.Text = "No existe un usuario con dicho nombre"
            End If
        Catch ex As SqlException
            Me.Label1.Text = ex.Message
        End Try
  End Sub
End Class

Para poder recuperar los datos lo hacemos creando un objeto de la clase SqlDataReader e inicializándolo mediante la llamada del método ExecuteReader de la clase SQLCommand:

            Dim registro As SqlDataReader = comando.ExecuteReader

Luego recorremos el SqlDataReader (como este caso puede retornar cero o una fila lo hacemos mediante un if:

If registor.Read Then

Si el método Read retorna true luego podemos acceder a la fila recuperada con el select.

Bajas

Seleccionamos del Explorador de soluciones la página bajausuario.aspx y procedemos a elaborar la siguiente interface visual:


Luego el código a ejecutar cuando se presiona el botón “Borrar” de la página es:

Imports System.Data.SqlClient

Partial Class bajausuario
    Inherits System.Web.UI.Page

  Protected Sub Button1_Click(ByVal sender As Object, _
              ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim s As String
            s = ConfigurationManager.ConnectionStrings("administracion").ConnectionString
            Dim conexion As New SqlConnection(s)
            conexion.Open()
            Dim comando As New SqlCommand("delete from usuarios where nombre='" & Me.TextBox1.Text & "'", conexion)
            Dim cant As Integer = comando.ExecuteNonQuery
            If cant = 1 Then
                Me.Label1.Text = "Se borró el usuario"
            Else
                Me.Label1.Text = "No existe un usuario con dicho nombre"
            End If
            conexion.Close()
        Catch ex As SqlException
            Me.Label1.Text = ex.Message
        End Try
  End Sub
End Class

El método ExecuteNonQuery retorna un entero y representa la cantidad de filas borradas de la tabla.

Modificaciones

Por último implementaremos la modificación de datos. Seleccionamos del Explorador de soluciones la página modificacionusuario.aspx y procedemos a elaborar la siguiente interface visual:


Para efectuar la modificación de datos de un usuario procederemos primero a la búsqueda de los datos actuales.
Luego el código para los eventos clic de los dos botones es:

Imports System.Data.SqlClient

Partial Class modificacionusuario
    Inherits System.Web.UI.Page

  Protected Sub Button1_Click(ByVal sender As Object, _
                        ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim s As String
            s = ConfigurationManager.ConnectionStrings("administracion").ConnectionString
            Dim conexion As New SqlConnection(s)
            conexion.Open()
            Dim comando As New SqlCommand("select nombre,clave,mail from usuarios " _
                 & " where nombre='" & Me.TextBox1.Text & "'", conexion)
            Dim registro As SqlDataReader = comando.ExecuteReader
            If registro.Read Then
                Me.TextBox2.Text = registro("clave")
                Me.TextBox3.Text = registro("mail")
            Else
                Me.Label1.Text = "No existe un usuario con dicho nombre"
            End If
        Catch ex As SqlException
            Me.Label1.Text = ex.Message
        End Try
  End Sub

  Protected Sub Button2_Click(ByVal sender As Object, _
                ByVal e As System.EventArgs) Handles Button2.Click
        Try
            Dim s As String
            s = ConfigurationManager.ConnectionStrings("administracion").ConnectionString
            Dim conexion As New SqlConnection(s)
            conexion.Open()
            Dim comando As New SqlCommand("update usuarios set " & _
                 "clave='" & Me.TextBox2.Text & _
                 "',mail='" & Me.TextBox3.Text & _
                 "' where nombre='" & Me.TextBox1.Text & "'", conexion)
            Dim cant As Integer = comando.ExecuteNonQuery()
            If cant = 1 Then
                Me.Label1.Text = "Datos Modificados"
            Else
                Me.Label1.Text = "No existe el usuario"
            End If
            conexion.Close()
        Catch ex As SqlException
            Me.Label1.Text = ex.Message
        End Try
  End Sub
End Class

El botón “Buscar” hace lo mismo que vimos en la consulta. Luego cuando se presiona el botón “Modificar” procedemos a hacer un update de la tabla usuarios con los datos cargados en los TextBox.

Ejercicios propuestos

1 – Crear una tabla:

alumnos (dni varchar(8), apellidonom varchar(50), provincia varchar(30))
Confeccionar una serie de páginas que permitan efectuar altas, bajas, modificaciones y consultas.

Retornar