Lección 4: Acceso a datos con ADO.NET Los espacios de nombres de .NET relacionados con acceso a datos Siempre que hagamos algo en .NET Framework será mediante las clases que este "marco" nos proporciona, esas clases siempre están contenidas en un espacio de nombres (namespace), que no es ni más ni menos que una forma de "contener" las distintas clases que podemos usar, pero de forma más o menos organizada.De esta forma, las clases de acceso a datos están todas contenidas en el espacio de nombres System.Data. En este espacio de nombres, a su vez existen otros espacios de nombres que contienen clases especializadas según el proveedor de datos que queramos usar, por tanto tendremos espacios de nombres para el acceso a datos de base SQL Server mediante el espacio de nombres System.Data.SqlClient o para acceder a bases de datos Oracle, las clases especializadas están incluidas en System.Data.OracleClient, aunque siempre tendremos la posibilidad de acceder de forma genérica usando las clases proporcionadas por el espacio de nombres System.Data.OleDb, las cuales nos permitirán también acceder a las bases de datos de Access. Las clases para la manipulación de los datos Estos espacios de nombres especializados nos permiten conectar con la base de datos, traer los datos indicados a la memoria y después de manipularlos, guardarlos en la base de datos, si es que realmente hemos hecho algún cambio, inserción o eliminación.En este proceso normalmente necesitaremos tanto clases especializadas dependiendo del origen de datos como clases genéricas para la manipulación de los datos en la memoria, (normalmente en forma desconectada). Por ejemplo, para el acceso a una base de datos de SQL Server, necesitaremos un objeto SqlConnection que será el que se encargue de realizar la conexión con la base de datos, un objeto SqlDataAdapter que será el que "realmente" realice la conexión, obtención de datos y finalmente la actualización en la base de datos de los cambios realizados, el objeto DataAdapter a su vez necesita saber cuales son las acciones que debe realizar con la base de datos, desde que datos obtener hasta que acciones deben aplicarse a la hora de actualizar, eliminar o insertar nuevos datos, todas estas acciones se indicarán por medio de comandos, en este ejemplo de acceso a una base de datos del tipo SQL Server, tendremos que usar objetos Command especializados, concretamente objetos del tipo SqlCommand en los que indicaremos las cadena de selección, update, insert y delete a las que, seguramente, ya estamos acostumbrados: SELECT FROM WHERE .Para manipular los datos obtenidos, lo habitual será usar un objeto DataSet o bien uno del tipo DataTable, en el primer caso, siempre tendremos uno o más objetos del tipo DataTable, dependiendo de la cadena de selección usadas, es decir, si los datos que queremos manipular afecta a una o más tablas e incluso si esa manipulación afecta a ciertas relaciones entre tablas. Independiente de que usemos una o varias tablas, la información que contiene cada tabla está incluida en filas, (una por cada fila o registro de datos), y cada una de las filas a su vez contiene columnas, pero tanto las tablas, filas o columnas son tipos de datos independientes del origen de datos y las clases que representan estos objetos están contenidas en el espacio de nombres System.Data, particularmente en las clases: DataTable, DataRow y DataColumn respectivamente.
Manipulación de datos en modo desconectado Lo habitual es que la manipulación de datos la hagamos en modo desconectado, que es como sería usando las clases que hemos indicado en el párrafo anterior.Los pasos a seguir para obtener los datos, trabajar con ellos y finalmente actualizarlos en la base de datos, (independientemente del origen de datos), serían los siguientes:1.Realizamos la conexión con el origen de datos (objeto del tipo Connection)2.Asignamos los objetos que correspondan para obtener los datos (comandos Select, Update, Insert y Delete)3.Obtenemos los datos (mediante un objeto del tipo DataAdapter)4.Manejamos los datos de forma local (desconectada) usando objetos del tipo DataTable.5.Actualizamos los datos en la base de datos usando nuevamente el DataAdapter, obteniendo del DataSet o DataTable las filas nuevas, modificadas o eliminadas.Veamos con ejemplos cómo realizar cada una de estas tareas, tanto para acceder a una base de datos de SQL Server como a una de Access, en este último caso, en el ZIP con el código de ejemplo se incluye la base de datos pubs.mdb obtenida a partir de la incluida en los ejemplos de Visual Studio .NET con formato SQL Server.