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.
Usando el control SQLConnection
Solo tres pasos son necesarios
- 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.
- Cambiar modificar la propiedad Name del objeto
- Definan que conexión va ser utilizada, expandiendo la propiedad
ConnectionString y seleccionando la conexión deseada.
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:
- Cree una aplicacion Windows
- Añada un objeto SQLConnection a l diseñador de windowsforms, nombre
cnNorthwind
- Añada una etiqueta (Label) y escriba en su propiedad Text "Cadena de
Conexión:"
- Agregue un control de cuadro de texto (TextBox) y nombrelo CadConexion.
Asegurese de que sea multilinea.
- Seleccione el objeto cnNorthwind y active la ventana de propiedades
- Expanda la sección Application Settings (en la ventana de propiedades)
- Haga clic sobre PropertyBinding y luego clicsobre el botón con los puntos
suspensivos que se encuentra a la derecha
- Ahora Visual Studio muestra el cuadro de dialogo Application Settings.Abra
el listbox ConnectionString y haga clic sobre New
-
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.
- Observe que ahora Visual Studio actualiza la propiedad
ConnectionString
- Desde el Solution Explorer abra el archivo de configuración y verifique
que existe una entrada como la siguiente
- 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
- 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.
- Añada una etiqueta y cambie su propiedad Text a "Estado de la conexion".
- Añada un textbox y renombrelo "EstadoConexion"
- Agregue 2 objetos Button, cambieles el nombre a "AbrirConexion" y
"CerrarConexion" respectivamente
- Cambie las propiedades text de los objetos Button a "Abrir" y
"Cerrar" respecitvamente
- Desde la ventana de código, seleccione el objeto cnNorthWind en la lista
de objetos. A continuación seleccione el evento
StateChange
- En el manejador del evento StateChange escriba el la siguiente línea
- EstadoConecion.Text =
e.CurrentState.ToString
- En el manejador de eventos del boton "AbrirConexion", escriba el código
necesario para abrir la conexion
- En el manejador de eventos del boton "CerrarConexion", escriba el código
necesario para abrir la conexion
- 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
- 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
- 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