Sei sulla pagina 1di 5

ADO.NET.- Conectar Base de Datos SQL con VB.

NET
por Axl_5054 Comentarios Categoras: Bases de Datos y Programacin Bueno, esta vez hablaremos sobre ADO.NET, la evolucin de la arquitectura de acceso a datos de Micro$oft ADO = ACtiveX Data Objects, ADO.NET provee a los programadores .NET de un acceso a las fuentes de datos relacionales, XML y aplicaciones de datos, es una gran herramienta que puede trabajar con diversos proveedores de datos, desde Sql Server, hasta Oracle y MySql Esta vez voy a mostrarles como crear procedimientos con los objetos bsicos de ADO.NET para conectarse y trabajar con una base de datos hecha en Sql Server Primero pasarmos a revisar los principales objetos de ADO.NET: Objeto DataReader: proporciona un acceso rpido y unidireccional (solo hacia adelante) a los datos, es de solo lectura. Objeto DataSet: proporciona una representacin relacional de los datos en memoria, es decir, es capaz de crear tablas y relaciones en memoria para trabajar en ellas. Objeto DataAdapter: sirve como un puente entre el DataSet y el origen de los datos. Objeto Command: proporciona lo que Micro$oft llama Funcionalidad Explcita, que consiste en los mtodos ExecuteNonQuery para las operaciones que no devuelven un resultado a la consulta, (Insert, Update, Delete), y ExecuteScalar para funciones que devuelven un nico valor en lugar de un conjunto de filas. Ahora, una forma de optimizar nuestro trabajo es identificar el tipo de cosulta que haremos, a modo de ejemplo tomaremos tres casos: 1. Consulta Lineal con un flujo de datos hacia adelante y de solo lectura: Puede utilizarse este modo para el tipo de consultas simples que no requieren de mucha interaccin del usuario o de actualizarse o regresar a un registro anterior, esto lo hacemos con el objeto DataReader, que fue diseado para mantener una conexin permanente con el origen de datos mientras este activo, su funcin, bsicamente, es leer los registros de la consulta de a uno en uno y en direccin hacia adelante (Forward-Only). 2. Consulta de tipo Desconectado: Puede proveer una representacin totalmente desconectada de los datos, para que el usuario pueda manipularlos sin verse restringido por problemas de recursos del servidor o disponibilidad de la fuente de datos, podemos utilizar el objeto DataSet, dentro del cual podemos contener tablas con los resultados de nuestras consultas no importando el origen de estos, (base de

datos, archivos xml, o datos que genera la aplicacin), esto permite una flexibilidad mayor cuando se trabaja con datos relacionados y permite exportarlos como archivos Xml. 3. Recuperar y actualizar desde una fuente de datos: Bueno, esto es medio sencillo si se ve as: el DataAdapter se conecta con el origen de datos y permite llenar el DataSet con los resultados, al manipular, modificar o/y actualizar los datos en el DataSet, tambin permite actualizarlos en el origen de datos. Ahora, despus de toda esta (necesaria) chachara, hemos de pasar a los ejemplos prcticos de utilizacin de los objetos de ADO.NET para establecer conexin y trabajar con un origen de Datos, (Micro$oft Sql Server) Veremos primero como importar el espacio de nombre necesario para trabajar con los objetos para el servidor sql, luego, declarar los objetos y conectarse a la base de datos Imports System.Data.SqlClient Luego necesitamos declarar una variable que nos diga dnde est el servidor y como se llama la base Public Conexion As String = Server =Server_1;packet size=4096;integrated security=SSPI;data source=Server_1;persist security info=False;initial catalog=Estudiantes Esta es una de las cadenas ms sencillas donde se establece el nombre del servidor y la base de datos, aunque si necesitamos declarar Usuario y Password utilicemos esta: Public Conexion As String = Server =Server_1;packet size=4096;User Id=Axl;Password=123;data source=Server_1;initial catalog=Estudiantes Tengo que recordarles, que en SQL, si utilizamos un usuario y password para entrar a la base, tenemos que darle permisos a ese usuario en todas las propiedades de las tablas que queramos que tenga acceso, en especial los Stored Procedures, que hay que marcarlos uno por uno luego declaramos los objetos necesarios para empezar a trabajar Dim Cmd As New SqlCommand Dim Cnn As New SqlConnection Dim Sql As String Dim Dr As DataRow Dim Da As New SqlDataAdapter Estos objetos los utilizaremos en cuatro procedimientos que crearemos a continuacin, Consulta de Busqueda, Insercin, Actualizacin y Eliminacin

Busqueda: Dim ds As New Data.DataSet Sql = Select * from Materias Cnn = New SqlConnection(Conexion) Cnn.Open() Da = New SqlDataAdapter(Sql, Cnn) Da.Fill(ds) Cnn.Close() Explicacin (lnea por lnea): Declara un Objeto tipo Dataset para depositar los datos de la consulta. Asigna la cadena de la consulta a la variable Sql (tipo string) Le da al objeto SqlCommand la direccin de la base y lo instancia para poder utilizarlo Abre la conexin con la propiedad .Open() del SqlCommand Le da al SqlDataAdapter la cadena de consulta y el objeto de conexin El SqlDataAdapter tiene la especial propiedad .Fill que vuelca todo lo que tiene en el objeto entre los parntesis, (el dataset), y ojo que solo lo hace en un dataset. Cuando has volcado el contenido de la consulta en el dataset simplemente cerras la conexin. Ojo y doble ojo en esto, se debe cerrar cada conexin que se abra, no importa que tipo de consulta se haga, las conexiones abiertas se acumulan y pueden volar tu servidor y simplemente se quedar pegado. Actualizacin: Sql = Update & tabla & Set & camposyvalores & Where & condicion Cnn = New SqlConnection(Conexion) Cnn.Open() Cmd = New SqlCommand(Sql, Cnn) Cmd.ExecuteNonQuery() Cnn.Close() Explicacin (Lnea por lnea): Asigna la cadena de la consulta a la variable Sql (tipo string) Le da al objeto SqlCommand la direccin de la base y lo instancia para poder utilizarlo

Abre la conexin con la propiedad .Open() del SqlCommand Le damos al SqlCommand el objeto de conexin y la cadena con la instruccin Sql Aqu utilizamos la propiedad .ExecuteNonQuery del SqlCommand que permite ejecutar una instruccin sin arrojar ningn resultado. Como ya lo he dicho antes, hay que cerrar la conexin. Eliminacin: Sql = Delete From & tabla & Where & condicion Cnn = New SqlConnection(Conexion) Cnn.Open() Cmd = New SqlCommand(Sql, Cnn) Cmd.ExecuteNonQuery() Cnn.Close() Explicacin (Lnea por lnea): Asigna la cadena de la consulta a la variable Sql (tipo string) Le da al objeto SqlCommand la direccin de la base y lo instancia para poder utilizarlo Abre la conexin con la propiedad .Open() del SqlCommand Le damos al SqlCommand el objeto de conexin y la cadena con la instruccin Sql Aqu utilizamos la propiedad .ExecuteNonQuery del SqlCommand que permite ejecutar una instruccin sin arrojar ningn resultado. Como ya lo he dicho antes, hay que cerrar la conexin. Insercin: Sql = Insert Into & tabla & ( & campos & ) Values ( & valores & ) Cnn = New SqlConnection(Conexion) Cnn.Open() Cmd = New SqlCommand(Sql, Cnn) Cmd.ExecuteNonQuery() Cnn.Close() Explicacin (Lnea por lnea): Asigna la cadena de la consulta a la variable Sql (tipo string)

Le da al objeto SqlCommand la direccin de la base y lo instancia para poder utilizarlo Abre la conexin con la propiedad .Open() del SqlCommand Le damos al SqlCommand el objeto de conexin y la cadena con la instruccin Sql Aqu utilizamos la propiedad .ExecuteNonQuery del SqlCommand que permite ejecutar una instruccin sin arrojar ningn resultado. Como ya lo he dicho antes, hay que cerrar la conexin. Ok, si han sido buenos observadores habrn descubierto que en los ltimos tres procedimientos solo cambia la instruccin Sql, por lo dems son iguales, Porque?, porque a mi juicio, hay dos tipos de instrucciones, Las que te devuelven algo y las que no te devuelven nada. El Select te devuelve algo, lo que sea, un campo, una fila, una columna, una tabla, cualquier cosa, los dems (Insert, Update, Delete) no te devuelven nada por eso usamos el .ExecuteNonQuery del amigo SqlCommand y podemos utilizar el mismo cdigo para los tres. Como lo he dicho desde la primera entrada que hice en nuestro blog, utilizar los mtodos ms simples para hacer las cosas, porque bueno, Occam dijo que la respuesta ms simple y obvia es casi siempre la mas probable, (en nuestro caso, no es solo la nica), pero no siempre la correcta. Hay muchas formas de hacer las cosas, pero trataremos de tomar las ms fciles y las ms prcticas.

Potrebbero piacerti anche