sábado, 27 de junio de 2009

Operaciones Básicas sobre datos con ADO.NET 2.0 Parte III de III

Después de explicar los conceptos sobre las operaciones con los datos y sobre las clases de .NET que nos sirven para almacenar y manipularlos, ahora voy a explicar lo que se necesita para trabajar con una fuente de datos (con una base de datos SQL Server 2005).
Para trabajar con una fuente de datos se necesita utilizar un proveedor, alguien 'intermedio' para poder conectarse con esa fuente, recoger los datos, modificarlos y actualizarlos. Pues bien, para eso necesitamos hacer uso de algunos proveedores, entre los que destacan:
Los proveedores ODBC y OLEDB son utilizados para algunas fuentes como Excel o Access, sin embargo, el rendimiento de nuestras aplicaciones bajan si utilizamos bases de datos como SQL Server, MySQL, Oracle, etc., ya que dichos proveedores son implementados sólo para fines de compatibilidad con algunos lenguajes y aplicaciones y no exponen toda la funcionalidad de cada una de estas fuentes.
Para resolver este problema, ADO.NET ofrece un proveedor nativo .NET para SQL Server y Oracle, en el espacio de nombres System.Data.SqlClient y System.Data.OracleClient respectivamente. Las clases que se encuentran en estos espacios de nombres heredan la funcionalidad de las clases ubicadas en el espacio de nombres System.Data.Common, que como su nombre lo indica, son clases básicas Comunes que comparten y 'deben' compartir los proveedores de datos para .NET, es por eso que hay librerías MySQL para .NET, Interbase, etc., sólo heredan el comportamiento de las principales clases que nos sirven para la manipulación de los datos:
  • DbConnection: Representa una conexión a una fuente (o base) de datos.
  • DbCommand: Representa un procedimiento almacenado en la base de datos o una instrucción SQL.
  • DbDataAdapter: Representa un conjunto de comandos de datos y una conexión de base de datos que se utilizan para rellenar un System.Data.DataSet y actualizar una base de datos.
*Reemplaza las iniciales 'Db' y utilizalas para fuente de datos, por ejemplo, si utilizas SQL Server, será SqlConnection, SqlDataAdapter, etc.
La clase más compleja y la más util es DbDataAdapter, ya que ella permitirá recoger y actualizar los datos en la fuente de una manera transparente al usuario.
Veamos un ejemplo de el uso en SQL Server 2005 siguiendo el ejemplo de la tabla alumnos del post anterior:

Dim sqlConexion As New SqlClient.SqlConnection("Data Source=localhost\SQLEXPRESS;Initial Catalog=alumnos;Integrated Security=True")

'Creamos el adaptador de datos que nos servir para realizar las operaciones
'a la base de datos, utilizando algunos comandos, le pasamos como parámetro la sentencia
'SQL para seleccionar todos los registros y la conexión que se utilizar
Dim sqlAdaptador As New SqlClient.SqlDataAdapter("SELECT idAlumno, nombre, telefono, fechaNac FROM alumnos", sqlConexion)

'Podemos establecer las demás operaciones con los datos a través de las propiedades:
'InsertCommand (de tipo SqlCommand) que nos sirve para Agregar registros a la BD
sqlAdaptador.InsertCommand = New SqlClient.SqlCommand("INSERT INTO alumnos VALUES (nombre=@nombre, telefono=@telefono, fechaNac=@fechaNac)")

'Agregamos los parámetros, para evitar inyecciones sobre las sentencias SQL
'Como observación: (los parámetros en SQLServer y Access se escriben con la '@' al inicio)
'y por ejemplo en MySQL deben empezar con el smbolo '?'
sqlAdaptador.InsertCommand.Parameters.Add("@nombre", SqlDbType.NVarChar, 35)
sqlAdaptador.InsertCommand.Parameters.Add("@telefono", SqlDbType.VarChar, 12)
sqlAdaptador.InsertCommand.Parameters.Add("@fechaNac", SqlDbType.DateTime)
'UpdateCommand sirve para actualizar registros ya existentes
sqlAdaptador.UpdateCommand = New SqlClient.SqlCommand("UPDATE alumnos SET (nombre=@nombre, telefono=@telefono, fechaNac=@fechaNac) WHERE idAlumno=@idAlumno")

'Agregamos los parámetros, para evitar inyecciones sobre las sentencias SQL
sqlAdaptador.UpdateCommand.Parameters.Add("@nombre", SqlDbType.NVarChar, 35)
sqlAdaptador.UpdateCommand.Parameters.Add("@telefono", SqlDbType.VarChar, 12)
sqlAdaptador.UpdateCommand.Parameters.Add("@fechaNac", SqlDbType.DateTime)
sqlAdaptador.UpdateCommand.Parameters.Add("@idAlumno", SqlDbType.Int)
'DeleteCommand sirve para eliminar físicamente los registros en una tabla en la base de datos
sqlAdaptador.DeleteCommand = New SqlClient.SqlCommand("DELETE FROM alumnos WHERE idAlumno=@idAlumno")
'Agregamos los parámetros, para evitar inyecciones sobre las sentencias SQL
sqlAdaptador.DeleteCommand.Parameters.Add("@idAlumno", SqlDbType.Int)

'ahora ya tenemos nuestro adaptador listo para utilizarse con los mtodos, Fill y Update
sqlAdaptador.Fill(alumnosDS)
'podemos hacer las operaciones pertinentes sobre los datos en el DataSet 'alumnosds', va el post 2
'finalmente actualizamos esos cambios en la base de datos con un solo método que se encarga de hacer
'las operaciones necesarias (insertar, actualizar o eliminar)
sqlAdaptador.Update(alumnosDS)
Nota: El servidor de la fuente de datos, la base de datos, la tabla, los campos utilizados en este ejemplo son ficticios y utilizados para demostrar el uso de las clases que nos sirven para la manipulación de los datos.

No hay comentarios:

Publicar un comentario