Oscar Berroteran

Visual Basic no es un lenguaje ... es un estilo de vida

ADO .Net. Guia de inicio rápido. Parte III

Tarde, pero seguro...

Estableciendo la conexión a nuestra base de datos.

Tal como se hacía en la antiguedad (o sea vb4,vb5 y vb6) en ADO .Net necesitamos conectarnos a un origen de datos para realizar cuanlquier acción, entendiendose por accion a una consulta, una inserción, una modificación, etc.

Los objetos de tipo Connection son los responsables de establecer y manejar la comunicación entre una base de datos y nuestra aplicación .Net. Este objeto es parte de un proveedor administrado, cada uno de los cuales implementa su "propia versión". Para esta serie utilizaremos el proveedor administrado de SQL Server, por lo que en esta parte me referire exclusivamente al objeto SQLConnection

Es posible crear una conexión de diferentes formas.

Conexiones en tiempo de diseño

Crear una conexión en tipo de diseño es tan fácil como insertar un  TextBox en el formulario, es decir, arrastramos el objeto SQLConnection del toolbox  y lo soltamos sobre el formulario.

Ebueno aclarar que el objeto SQLConnection no esta presente de forma predeterminada en el ToolBox, por lo que si no lo han hecho aún (y queren seguir los ejemplos) es buen momento para hacerlo. ¿Cómo?. Facil, solo basta seleccionar la opción Choose Items del menú contextual del ToolBox y posteriormente marcar el checkbox del elemento SQLConnection.

image

Usando el control SQLConnection

Solo tres pasos son necesarios

  1. Arrastar y colocar sobre el diseñador de formularios el objeto SQLConnection del ToolBox. Al finalizar esta operacion se añade al Component Tray el objeto.
  2. Cambiar modificar la propiedad Name del objeto
  3. Definan que conexión va ser utilizada, expandiendo la propiedad ConnectionString y seleccionando la conexión deseada.
image

Creación de conexiones en tiempo de ejecución

Si. Ya sé. Eso no es lo que necesitan.

Usualmente los desarrolladores no utiizan estos objetos "gráficos" o asistentes para incorporar conexiones en sus aplicaciones ya que la idea principal es que la conexión funcione en toda la aplicación, en vez de estar vinculada con un formulario.

Para poder utilizar esta opcion es necesario en primer lugar, incorporar el Namespace System.Data.SQLClient en el archivo donde vamos a utilizarlo:

Imports System.Data.SQLClient

Luego, pasamos a declarar una variable del tipo SQLConnection; esta variable es la que sera utiizada para controlar todo lo relacionado a la conexion

Dim cnNorthwind as SQLConnection

o

Dim cnNorthwind as SQLConnection

cnNorthwind = new SQLConnection

Tambien podemos utilizar esta sentencia, que sería la combinación de las dos anteriores en una sola instrucción

Dim cnNorthwind as new SQLConnection(cadenadeconexion) 

Propiedades del objeto SQLConnection

Las mas importantes son:

  • ConnectionString: define la información de la base de datos con la que se va a trabajar.Es un valor de tipo String que debe estar delimitado por comillas.
  • Connecti onTimeOut: define el tiempo maximo de espera por establecer la conexión. Si expira, se genera una excepción
  • State: un valor de tipo entero (ConnectionState)  que indica el estado actual de la conexión

La propiedad ConnectionString, a mi juicio, es la más importante de todas, ya que a través de ella, podemos definir casi todas las propiedades del objeto connection. El formato es muy sencillo y consiste en pares de claves-valores (keywords-values), separando los pares con punto y coma:

"DatSource=localhost;Initial Catlog=Northwind;Integrated Security=SSPI"

"DatSource=tuServidor;Initial Catlog=Northwind;UID=usuarioBD;PWD=contraseña"

"DatSource=tuServidor;Initial Catlog=Northwind;User Id=usuarioBD;Password=contraseña"

Los elementos a tomar en cuenta en la cadena de conexión son:

  • DataSource: nombre del servidor donde se encuentra la base de datos. Es posible utilizar "localhost" o incluso un punto "."  para indicar que la base de datos se encuentra en el servidor local
  • Initial Catalog: nombre de la base de datos. Hay que tener cuidado cuando el nombre de la base de datos incluye una comilla simple o apostrofe ('). Si ese es el caso la cadena de conexión puede generar una excepción.
  • Integrated Security: define si se usa o no la seguridad integrada entre SQL Serve y Windows. Su valor predeterminado es False. Si queremos acceder a  un servidor que no usa seguridad integrada entonces debemos definir dos elementos adicionales en la cadena de conexion
    • UID o User Id= identificación (login) de usuario
    • PWD o Password= contraseña del usuario.

Para definir la cadena de conexión, solo basta asignar la misma a la propiedad ConnectionString del objeto SQLConnection:

Dim cnNorthwind as SQLConnection

Dim strSQL as String = _

"DatSource=localhost;Initial Catlog=Northwind;Integrated Security=SSPI"

CnNorthwind = new SQLConnection

CnNorthWind.ConnectionString=strSQL

O, mas facil... menos lineas de código

Dim cnNorthW as  New SQLConnection("DatSource=localhost;Initial Catlog=Northwind;Integrated Security=SSPI")

NOTA: la propiedad ConnectionString solo puede ser alterada cuando la conexión a la base de datos ha sido cerrada.

Hasta ahora, hemos visto una técnica de establecer la cadena de conexión de una forma "cableada" o "hard-coded", es decir la cadena de conexión esta "fija" dentro del código. En casos sencillos (p. ej. demos) puede considerarse una ventaja, pero en aplicaciones grandes o comerciales no es así, ya que lo más seguro que por lo menos el nombre del servidor cambie... esto hace que esta cadena de conexión sea un candidato a ser almacenada en un archivo de recursos de la aplicación o en el archivo de configuracion (app.config o web.config)

Hagamos un ejercicio para manejar la cadena de conexion desde un archivo de configuracion:

  1. Cree una aplicacion Windows
  2. Añada un objeto SQLConnection a l diseñador de windowsforms, nombre cnNorthwind
  3. Añada una etiqueta (Label)  y escriba en su propiedad Text "Cadena de Conexión:"
  4. Agregue un control de cuadro de texto (TextBox) y nombrelo CadConexion. Asegurese de que sea multilinea.
  5. Seleccione el objeto cnNorthwind y active la ventana de propiedades
  6. Expanda la sección Application Settings (en la ventana de propiedades)
  7. Haga clic sobre PropertyBinding y luego clicsobre el botón con los puntos suspensivos que se encuentra a la derecha   image
  8. Ahora Visual Studio muestra el cuadro de dialogo Application Settings.Abra el listbox ConnectionString y haga clic sobre Newimage
  9. Visual Studio abre el cuadro de dialogo New Application Setting. En el elemento DefaultValue escriba su cadena de conexion, algo similar a "Data Source=localhost;Initial Catalog=Northwind;Integrated Security= SSPI". En el elemento name escriba SQLConnectionString. Tome en cuenta que si Ud. no ha instalado la base de datos Northwind, debe cambiar este elemento de la cadena de conexión por una base de datos que exista en su servidor. Una vez que ha definido esto hagan clic sobre el boton OK para almacenar esta información en el archivo de configuracion.                            image
  10. Observe que ahora Visual Studio actualiza la propiedad ConnectionString                                                                     image
  11. Desde el Solution Explorer abra el archivo de configuración y verifique que existe una entrada como la siguiente       image
  12. Ahora, la pregunta importante ¿cómo obtengo esa informació?. La respuesta fácil: utilizando la clase My.Settings. Probemoslo. Abra la ventana de código del formulario y escriba la siguiente línea                                         
    • CadConexion.Text = My.Settings.SQLConnecctionString
  13. Ejecute la aplicación y el resultado debe mostrar la cadena de conexión que acaba de agregar al archivo de configuración en el cuadro de texto.

Sencillo no?

Métodos del objeto SQLConnection

Todos los objetos Connection implementan una serie de métodos definidos por la clase DbConnection definida en el namespace Data.Common, y cada proveedor administrado les asigna una funcionalidad muy parecida.

  • BeginTransaction: inicia una transacción en la base de datos
  • ChangeDatabase: cambia la base de datos actual sobre una conexión abierta
  • Close: cierra la conexion a la base de datos
  • CreateCommand: crea y retorna un objeto Command asociado a la conexión
  • GetSchema: retorna la información del esquema de la base de datos
  • Open: abre la conexión a la base de datos

Obviamente, los metodos mas universalmente utilizados son Open y Close. Hay que tomar en cuenta que dentro del modelo de objetos de ADO .Net 2.0 existen objetos que pueden abrir y cerrar una conexión de forma ímplicita: DataAdapter, TableAdapter y DataCommand. Explicitamente tambien podemos abrir y cerrar conexiones claro esta:

Dim cnNorthW as new SqlConnection

cnNorhW.ConnectionString= My.Settings.SQLConnecctionString

cnNorthW.Open

........

CnNorthW.Close

Eventos del objeto Connection

Si. También tiene eventos. Dos, para ser mas especifico: StateChange el cual es definido por la clase DbConnection e InfoMessage, el cual es proporcionado por el .Net Framework.

El evento StateChange es desencadenado cuando cambia el estado de la conexion.Este evento utiliza un argumento (objeto) llamado StateChangeEventsArgs el cual es enviado al manejador del evento. Como este argumento es en realidad un objeto dos propiedades: OriginalState y CurrentState, los posibles valores para ambas propiedades son

  • Broken: la conexión esta abierta pero no funciona :-(, es necesario cerrarla y abrirla nuevamente
  • Closed: la conexion esta cerrada
  • Connecting: la conexion esta siendo abrierta, pero aún no se ha establecido
  • Executing: la conexión esta ejecutando un comando
  • Fetching: la conexión esta retornando datos
  • Open: la conexión esta abierta

Cuando utilizamos el objeto SQLConnection a traves del asistente, este automaticamente nos incorpora los  manejador de eventos en nuestra ventana de código. Sin embargo si utilizamos el objeto SQLConnection via programaticamente, nosotros tambien podemos tener acceso a los manejadorers de sus eventos. Para ello debemos utilizar la siguiente línea:

 Dim WithEvents cnNorthW as new SqlConnection

Una vez que hemos escrito esta línea pueden dar un vistazo sobre la lista de objetos de la ventana de código y desde allí podrán observar que se ha añadido el objeto SQLConnection que han declarado.

Pongamos a prueba el tema de los eventos, para ello utilizaremos el proyecto que habiamos creado en el ejercicion anterior.

  1. Añada una etiqueta y cambie su propiedad Text a "Estado de la conexion".
  2. Añada un textbox y renombrelo "EstadoConexion"
  3. Agregue 2 objetos Button, cambieles el nombre a "AbrirConexion" y "CerrarConexion" respectivamente
  4. Cambie las propiedades text de los objetos Button a "Abrir"  y "Cerrar" respecitvamente
  5. Desde la ventana de código, seleccione el objeto cnNorthWind en la lista de objetos. A continuación seleccione el evento StateChange                    image
  6. En el manejador del evento StateChange escriba el la siguiente línea
    • EstadoConecion.Text = e.CurrentState.ToString
  7. En el manejador de eventos del boton "AbrirConexion", escriba el código necesario para abrir la conexion
    • cnNorthW.Open
  8. En el manejador de eventos del boton "CerrarConexion", escriba el código necesario para abrir la conexion
    • cnNorthW.Close
  9. Ejecute la aplicación y presione el boton AbrirConexion y luego el boton CerrarConexion. Observer como varia el texto que se muestra en el cuadro de texto EstadoConexion                                             image
  10. Si por alguna casualidad (:-D) Ud. presiona 2 veces seguidas el boton AbrirConexion, se habra dado cuenta que se dispara una excepcion de tipo InvalidOperationException. Esto sucede debido que no es posible abrir una conexion que ya esta abierta.Para evitar este comportamiento, verifique el estado de la conexión antes de abrirla
    • If cnNorthW.State = ConnectionState.Closed Then CnNorthW.Open
  11. Pruebe nuevamente la aplicación...

Bien, por ahora es todo lo que tengo que contarles sobre este importante objeto. Espero les sea de ayuda y los invito a encontrarnos dentro de poco.

Ahh... de verdad que trate pero me fue imposible escribir menos :-(

Cambio y fuera

Oscar

Post cruzado desde msmvps.com/blogs/oberroteran
Posted: 9/10/2007 7:26 por Oscar Berroteran | con 6 comment(s)
Comparte este post:

Comentarios

javier ha opinado:

esta super, mil gracias!

# October 10, 2007 4:43 PM

Victor ha opinado:

Gracias por este gran aporte... espero que sigan mas aportes como este tipo, ya que me estoy inicializando en lo que es programacion net.

# October 12, 2007 6:49 PM

edgar ha opinado:

Hola, soy nuevo, esto lo puedo usar VB2005

# June 2, 2008 10:20 PM

constanza ha opinado:

hola me parece muy interesante el tema y estoy interesada en encontrar mas contenido como por ejem: I,II, entre otros ya que me estoy iniciando

gracias,

Cony

# September 18, 2008 5:01 PM

luis ha opinado:

oe cholo me gustaria saber si se puede usar en visual studio 2005, y tambien con access 2003

# November 11, 2008 4:53 PM

Ivan Ferrer ha opinado:

Muy util, gracias.

# February 11, 2009 2:35 PM