ado net - informe

24
 UNIVERSIDAD NACIONAL DE TRUJILLO FACULTAD DE INGENIERIA E.A.P. INGENIERIA DE SISTEMAS  ADO.NET “Sqlconnec tion, dataset, sqldataadapter”  ALUMNOS: Balarezo Requena, Gaby Bruno Cervera, Sheyla Cabanillas Cancino, Arnold Cabanillas Tejada, Ronal Vigo Cabanillas, Carlos CURSO: Sistemas Avanzados de Ingeniería de Sistemas I DOCENTE: Ing. Robert Sánchez Ticona Guadalupe, mayo de 2012

Upload: arnold-grobertt

Post on 20-Jul-2015

472 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 1/24

 

UNIVERSIDAD NACIONAL DE TRUJILLO FACULTAD DE INGENIERIA

E.A.P. INGENIERIA DE SISTEMAS

 ADO.NET“Sqlconnection, dataset, sqldataadapter” 

 ALUMNOS:

Balarezo Requena, Gaby

Bruno Cervera, Sheyla

Cabanillas Cancino, Arnold

Cabanillas Tejada, RonalVigo Cabanillas, Carlos

CURSO:

Sistemas Avanzados de Ingeniería de Sistemas I

DOCENTE:

Ing. Robert Sánchez Ticona

Guadalupe, mayo de 2012

Page 2: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 2/24

 

 

ADO NET 1

Page 3: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 3/24

 

 

ADO NET 2

 ADO.NET

INTRODUCCION

ADO.NET no es una actualización de ADO, sino un rediseño completo. En el núcleo

de ADO.NET es un conjunto de bibliotecas que están diseñados para comunicarse

con una variedad de servicios de fondo almacenes de datos. Las bibliotecas de

ADO.NET son parte del espacio de nombres System. Data y abarcan una gran

variedad de bibliotecas adicionales que permiten la conexión de origen de datos,

presentación de consultas, y los resultados de procesamiento. Uno de los objetivos

del nuevo diseño de ADO.NET es proporcionar una caché jerárquica, desconectado

de datos que funciona offline y online. El objeto central desconectada, llamado el

conjunto de datos, permite la búsqueda, el filtrado, la navegación y elalmacenamiento de espera de los cambios de datos. El diseño de ADO.NET se basa

en XML y permite ADO.NET para cerrar la brecha entre el acceso a bases de datos

tradicionales y el desarrollo de XML. Los desarrolladores son capaces de trabajar

tanto con los datos XML y los datos de base de datos utilizando un conjunto común

de interfaces de datos, como se muestra en la Figura.

ADO.NET está diseñado para proporcionar un acceso coherente a orígenes de

datos comunes a través de un proveedor de datos administrado. Esto proporcionauna interfaz común para las fuentes de datos como SQL Server, así como las

personas expuestas a través de OLE-DB y las interfaces XML. Cada uno de los

proveedores administrados está diseñado específicamente para el tipo de acceso a

datos que proporcionará. Estos resultados pueden ser procesados directamente o

se colocan en un objeto DataSet de ADO.NET que luego pueden ser expuestos al

usuario, combinados juntos, o incluso de forma remota entre niveles de aplicación.

Una de las mayores ventajas del objeto DataSet es que se puede utilizar de forma

independiente en él. NET Framework para administrar los datos almacenados

localmente o archivos XML. ADO realmente ha sido el pilar de acceso a la base dedatos durante años, pero había varios problemas de diseño inherentes que

Page 4: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 4/24

 

 

ADO NET 3

ADO.NET se creó para superar. Uno de los principales problemas que ADO.NET

está diseñado para resolver es la falta de elementos necesarios para construir

fácilmente aplicaciones que formaban parte de. NET y la arquitectura orientada a

servicios.

Por ejemplo, XML se añadió en el último momento a ADO como el estándar

comenzó a surgir dentro de la industria. ADO.NET en el otro lado fue diseñado

basado en XML.Además, el motor de cursor de ADO permite pasar objetos

Recordset de ADO desconectados entre los niveles de las aplicaciones, pero no

proporciona una forma de combinar varios objetos de registros juntos.

ADO también proporciona una forma de enviar los cambios a la base de datos en

caché, pero no proporciona control mediante programación de la lógica utilizada

para enviar las actualizaciones. Una de las principales limitaciones para el

desarrollo de aplicaciones basadas en SOA escalables que carecen en el motor decursor de ADO es la posibilidad de enviar los cambios pendientes en la base de

datos a través de procedimientos almacenados.

Muchos administradores de bases de datos permiten a los usuarios modificar sólo

el contenido de sus bases de datos a través de procedimientos almacenados, que

no es posible a través del objeto binario del objeto de conjunto de registros ADO.

CONCEPTO

El ADO.NET es un conjunto de componentes del software que pueden ser usadospor los programadores para acceder a datos y a servicios de datos. Es una parte dela biblioteca de clases base que están incluidas en el Microsoft .NET Framework.

Es comúnmente usado por los programadores para acceder y para modificar losdatos almacenados en un Sistema Gestor de Bases de Datos Relacionales, aunquetambién puede ser usado para acceder a datos en fuentes no relacionales.

ADO.NET es a veces considerado como una evolución de la tecnología ActiveX DataObjects (ADO), pero fue cambiado tan extensivamente que puede ser concebido

como un producto enteramente nuevo.

Page 5: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 5/24

 

 

ADO NET 4

Esta tecnología es una parte del .NET Framework 3.0 (habiendo sido parte del 

 framework desde la versión 1.0).

ADO.NET consiste en dos partes primarias:

Data provider

Estas clases proporcionan el acceso a una fuente de datos, como Microsoft SQL

Server y Oracle. Cada fuente de datos tiene su propio conjunto de objetos delproveedor, pero cada uno tiene un conjunto común de clases de utilidad:

  Connection: Proporciona una conexión usada para comunicarse con lafuente de datos. También actúa como Abstract Factory para los objetos

command.

  Command: Usado para realizar alguna acción en la fuente de datos, como

lectura, actualización, o borrado de datos relacionales.

 Parameter: Describe un simple parámetro para un command. Un ejemplocomún es un parámetro para ser usado en un procedimiento almacenado.

Page 6: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 6/24

 

 

ADO NET 5

  DataAdapter: "Puente" utilizado para transferir data entre una fuente dedatos y un objeto DataSet (ver abajo).

  DataReader: Es una clase usada para procesar eficientemente una lista

grande de resultados, un registro a la vez.

DataSets

Los objetos DataSets, un grupo de clases que describen una simple base de datosrelacional en memoria, fueron la estrella del show en el lanzamiento inicial (1.0)

del Microsoft .NET Framework. Las clases forman una jerarquía de contención:

  Un objeto DataSet representa un esquema (o una base de datos entera o unsubconjunto de una). Puede contener las tablas y las relaciones entre esas

tablas.

  Un objeto DataTable representa una sola tabla en la base de datos. Tiene unnombre, filas, y columnas.

  Un objeto DataView "se sienta sobre" un DataTable y ordena los datos

(como una cláusula "order by" de SQL) y, si se activa un filtro, filtra los

registros (como una cláusula "where" del SQL). Para facilitar estasoperaciones se usa un índice en memoria. Todas las DataTables tienen unfiltro por defecto, mientras que pueden ser definidos cualquier número de

DataViews adicionales, reduciendo la interacción con la base de datos

subyacente y mejorando así el desempeño.

  Un DataColumn representa una columna de la tabla, incluyendo su nombrey tipo.

  Un objeto DataRow representa una sola fila en la tabla, y permite leer yactualizar los valores en esa fila, así como la recuperación de cualquier fila

que esté relacionada con ella a través de una relación de clave primaria -

clave extranjera.

 Un DataRowView representa una sola fila de un DataView, la diferenciaentre un DataRow y el DataRowView es importante cuando se está

interactuando sobre un resultset.

  Un DataRelation es una relación entre las tablas, tales como una relación de

clave primaria - clave ajena. Esto es útil para permitir la funcionalidad del

DataRow de recuperar filas relacionadas.

  Un Constraint describe una propiedad de la base de datos que se debecumplir, como que los valores en una columna de clave primaria deben serúnicos. A medida que los datos son modificados cualquier violación que se

presente causará excepciones.

Page 7: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 7/24

 

 

ADO NET 6

Un DataSet es llenado desde una base de datos por un DataAdapter cuyas

propiedades Connection y Command que han sido iniciados. Sin embargo, unDataSet puede guardar su contenido a XML (opcionalmente con un esquema XSD),

o llenarse a sí mismo desde un XML, haciendo esto excepcionalmente útil para losservicios web, computación distribuida, y aplicaciones ocasionalmente conectadas.

Entity Framework 

El ADO.NET Entity Framework es un conjunto de APIs de acceso a datos para el

Microsoft .NET Framework, apuntando a la versión de ADO.NET que se incluye conel .NET Framework 3.5. Fue lanzado como actualización separada junto con el

Service Pack 1 para el .NET Framework, después del lanzamiento de tanto el .NETFramework 3.5 y el Visual Studio 2008. Una nueva versión del Entity Framework 

(v 4.0) será liberada junto al Visual Studio 2010 y el .NET Framework 4.0.

Una entidad del Entity Framework es un objeto que tiene una clave representando

la clave primaria de una entidad lógica de datastore. Un modelo conceptual EntityData Model (modelo Entidad-Relación) es mapeado a un modelo de esquema de

datastore. Usando el Entity Data Model, el Framework permite que los datos sean

tratados como entidades independientemente de sus representaciones deldatastore subyacente.

El Entity SQL es un lenguaje similar al SQL para consultar el Entity Data Model (en

vez del datastore subyacente). Similarmente, las extensiones del Linq, Linq-to-Entities, proporcionan consultas tipeadas en el Entity Data Model. Las consultasEntity SQL y Linq-to-Entities son convertidas internamente en un Canonical QueryTree que entonces es convertido en una consulta comprensible al datastore

subyacente (ej. en SQL en el caso de una base de datos relacional).

Las entidades pueden utilizar sus relaciones, y sus cambios enviados de regreso al

datastore.

SQLCONNECTION EN ADO.NET

Introducción

Lo primero que tendrá que hacer al interactuar con una base de datos es crear una

conexión. La conexión le dice al resto de la base de datos de código de ADO.NETque se está hablando. Gestiona toda la lógica de bajo nivel asociada con losprotocolos específicos de bases de datos.

Esto hace que sea fácil para usted debido a que la mayor parte del trabajo quetendrá que hacer en el código es una instancia del objeto de conexión, abrir la

conexión, a continuación, cerrar la conexión cuando haya terminado. Debido a la

Page 8: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 8/24

 

 

ADO NET 7

forma en que otras clases de ADO.NET se construyen, a veces ni siquiera tiene quehacer mucho trabajo.

Aunque el trabajo con conexiones es muy fácil de ADO.NET, es necesario

comprender las conexiones con el fin de tomar las decisiones correctas al codificarsus rutinas de acceso a datos. Entender que una conexión es un recurso

valioso. Claro, si usted tiene una aplicación de cliente independiente que trabaja enuna sola base de datos una sola máquina, es probable que no se preocupan por

esto. Sin embargo, piense en una aplicación de empresa, donde cientos de usuariosen toda la empresa a acceder a la misma base de datos. Cada conexión representa

sobrecarga y sólo puede haber una cantidad finita de ellos. Para ver un caso más

extremo, considere un sitio Web que se ve afectado con cientos de miles de visitasal día algunas aplicaciones que se llevan las conexiones y no dejar ir puede tenergraves impactos negativos en el rendimiento y la escalabilidad.

Creación de un objeto SqlConnection

Un SqlConnection es un objeto, al igual que cualquier otro objeto C #. La mayor

parte del tiempo, que acaba de declarar y crear instancias de la conexiónSqlConnection, todo al mismo tiempo, como se muestra a continuación:

SqlConnection conn = new SqlConnection ("Data Source = (local); Initial Catalog = Neptuno; Integrated Security = SSPI");

El objeto SqlConnection instancia anterior se utiliza un constructor con un solo

argumento de tipo cadena se llama este argumento una cadena de conexión. LaTabla 1 describe las partes comunes de una cadena de conexión.

El objeto SqlConnection se encarga de la parte de la comunicación física entre la

aplicación y el servidor SQL de base de datos. Una instancia de la clase

SqlConnection en. NET Framework es compatible con el proveedor de datos parala base de datos SQL Server.

La instancia de SqlConnection lleva cadena de conexión como argumento y pasar el

valor de la declaración de constructor. Cuando se establece la conexión, los

comandos de SQL pueden ser ejecutados, con la ayuda del objeto de conexión, pararecuperar o manipular los datos en la base de datos. Una vez que las actividades debase de datos más, la conexión debe ser cerrada y liberar los recursos de base de

datos.

El método Close () en la clase SqlConnection se utiliza para cerrar la conexión con

la base. El método Close deshace todas las transacciones pendientes y libera la

conexión de la base de datos SQL Server.

Imports System.Data.SqlClient 

Public Form1 clase

Page 9: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 9/24

 

 

ADO NET 8

Private Sub Button1_Click (ByVal sender As System.Object e, ByVal comoSystem.EventArgs) Handles Button1.Click 

ConnetionString dévil como secuenciaDim cnn Como SqlConnection

connetionString = "Data Source = ServerName; Initial Catalog =DatabaseName, ID de usuario = nombre de usuario, contraseña = contraseña"

cnn = New SqlConnection (connetionString)Tratar de

cnn.Open ()MsgBox ("Conexión Abre!")cnn.Close ()

Catch ex As Exception

MsgBox ("No se puede abrir la conexión!")End Try

End SubEnd Class

Usted tiene que proporcionar las informaciones necesarias para la cadena deconexión.

connetionString = "Data Source = ServerName; Initial Catalog =

DatabaseName, ID de usuario = nombre de usuario, contraseña Contraseña ="  

De la declaración anterior reemplace ServerName, DatabaseName, UserName,Password a los nombres reales .

Tabla 1. Cadenas de conexión ADO.NET contienen ciertos pares clave / valorpara especificar cómo hacer una conexión de base de datos. Estos incluyen la

ubicación, el nombre de la base de datos y credenciales de seguridad.

Cadena de conexiónNombre del parámetro

Descripción

Fuente de datosIdentifica el servidor. Podría ser equipo local, el

nombre de dominio de la máquina o dirección IP.

Initial Catalog Base de datos de nombre.

La seguridad integradaSe establece en SSPI para realizar la conexión con el

usuario de Windows de inicio de sesión

ID de usuario Nombre de usuario configurado en SQL Server.

Contraseña Contraseña juego de SQL Server ID de usuario.

La seguridad integrada es seguro cuando usted está en una sola máquina de

desarrollo haciendo. Sin embargo, a menudo tendrá que especificar la seguridadbasada en un ID de usuario de SQL Server con los permisos establecidos

Page 10: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 10/24

 

 

ADO NET 9

específicamente para la aplicación que esté utilizando. A continuación se muestrauna cadena de conexión, utilizando el ID de usuario y contraseña parámetros:

SqlConnection conn = new SqlConnection (

"Data Source = DatabaseServer; Initial Catalog = Neptuno; ID de usuario =IDdeUsuario; Contraseña = YourPassword");

Observe cómo el origen de datos está establecida en DatabaseServer para indicar

que es posible identificar una base de datos ubicada en un equipo diferente, en unared LAN o por Internet. Además, ID de usuario y la contraseña con sustituir elparámetro de seguridad integrada.

El uso de un objeto SqlConnection

El propósito de crear un objeto SqlConnection es lo que puede permitir que otrocódigo ADO.NET para trabajar con una base de datos. Otros objetos de ADO.NET,

como un objeto SqlCommand y un SqlDataAdapter tomar un objeto de conexióncomo parámetro. La secuencia de operaciones que ocurren en el curso de la vida de

un SqlConnection son como sigue:

1.  Cree una instancia del objeto SqlConnection.2.  Abrir la conexión.

3.  Pase la conexión con otros objetos de ADO.NET.

4.  Realizar operaciones de base de datos con el resto de los objetos deADO.NET.

5.  Cerrar la conexión.

Ya hemos visto cómo crear una instancia de SqlConnection. El resto de los pasos,abriendo, de paso, el uso, y el cierre se muestran en el Listado 1.

Listado 1. El uso de un objeto SqlConnection

con Sistema;

utilizando System.Data;

con System.Data.SqlClient;/ / / <summary>

/ / / Muestra cómo trabajar con objetos SqlConnection/ / / </ summary>

clase SqlConnectionDemo

{static void Main () {

/ / 1 . Crear instancias de la conexión

SqlConnection conn = nueva SqlConnection ("Data Source = (local); Initial Catalog = Neptuno; Integrated Security =

SSPI"); SqlDataReader rdr = NULL ;

tratar

Page 11: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 11/24

 

 

ADO NET 10

{/ / 2. Abra la conexión

conn.Open ();

/ / 3. Pasar la conexión a un objeto de comandocmd = SqlCommand nuevo SqlCommand ("select * from clientes", conn);

/ / / / 4. Utilice la conexión / / / / obtener resultados de la consulta

rdr = cmd.ExecuteReader ();

/ / imprimir el CustomerID de cada registro

, mientras que (rdr.Read ()) {

Console.WriteLine (rdr [0]); } }

finalmente

{/ / cerrar el lector

, si (rdr =! nula ) { rdr.Close (); }

/ / 5. Cierra la conexión

si (conn =! nula ) { conn.Close (); } } } }

Como se muestra en el Listado 1, se abre una conexión mediante una llamada

al Open () método de la SqlConnection ejemplo, conn . Las operaciones en unaconexión que no se ha abierto aún generarán una excepción. Por lo tanto, debeabrir la conexión antes de usarla.

Antes de utilizar un objeto SqlCommand , debe permitir que el código de ADO.NETsaber que la conexión que necesita. En el Listado 1, se establece el segundo

parámetro a la SqlCommand objeto con el SqlConnection objeto, conn . Lasoperaciones realizadas con el objeto SqlCommand se utiliza esa conexión.

El código que utiliza la conexión es un SqlCommand objeto, el cual realiza unaconsulta en la tabla Clientes. El conjunto de resultados se devuelven como

un objeto SqlDataReader y al mismo tiempo bucle lee la primera columna de cadafila del conjunto de resultados, que es la columna CustomerID. Vamos a discutir

el SqlCommand y SqlDataReader objetos en lecciones posteriores.

Por el momento, es importante que usted entienda que estos objetos se utilizael SqlConnection objeto para que sepan qué base de datos para interactuar con él.

Cuando haya terminado de usar el objeto de conexión, debe cerrarlo. De nohacerlo, podría tener graves consecuencias en el rendimiento y la escalabilidad dela aplicación. Hay un par de puntos que se hacen sobre la forma en que ha cerrado

la conexión en el Listado 1: el Close () se llama al método en un último bloque y nos

aseguramos de que la conexión no es nulo antes de cerrarlo.

Page 12: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 12/24

 

 

ADO NET 11

DATASETS EN ADO.NET

El DataSet de ADO.NET es una representación de datos residente en memoria queproporciona un modelo de programación relacional coherente

independientemente del origen de datos que contiene. Un DataSet representa un

conjunto completo de datos, incluyendo las tablas que contienen, ordenan yrestringen los datos, así como las relaciones entre las tablas.

Hay varias maneras de trabajar con un DataSet , que se pueden aplicar de formaindependiente o conjuntamente. Puede:

  Crear mediante programación una DataTable, DataRelation y una Constraint en

un DataSet y rellenar las tablas con datos.

  Llenar el DataSet con tablas de datos de un origen de datos relacional existente

mediante DataAdapter.

  Cargar y hacer persistente el contenido de DataSet mediante XML. Para obtener

más información, vea Utilizar XML en un DataSet.

También se puede transportar un DataSet con establecimiento inflexible de tipos

mediante un servicio Web XML. El diseño del DataSet lo convierte en idóneo para el

transporte de datos mediante servicios Web XML. Para obtener información general

sobre servicios Web XML, vea Información general acerca de servicios Web XML.

Para ver un ejemplo de cómo utilizar un DataSet de un servicio Web XML,

vea Consumir DataSet a partir de un servicio Web XML.

Crear un DataSet 

Puede crear una instancia de DataSet llamando al constructor DataSet. Si lo desea,

especifique un nombre de argumento. Si no especifica ningún nombre para el DataSet,

se establecerá el nombre "NewDataSet".

También es posible crear un nuevo DataSet basado en un DataSetexistente. El

nuevo DataSet puede ser una copia exacta del DataSet existente; un clon

del DataSet que copia la estructura relacional o el esquema, pero que no contieneningún dato del DataSet existente; o un subconjunto del DataSet, que contiene

solamente las filas modificadas delDataSet existente mediante el método GetChanges.

Para obtener más información, vea Copiar contenido de DataSet.

En el siguiente ejemplo de código se muestra cómo construir una instancia de

un DataSet.

VB 

DataSet customerOrders = new DataSet("CustomerOrders");

Page 13: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 13/24

 

 

ADO NET 12

 Agregar DataTable a DataSet 

ADO.NET permite crear objetos DataTable y agregarlos a un DataSet existente. Es

posible establecer información de restricciones para una DataTable mediante laspropiedadesPrimaryKey y Unique.

Ejemplo

En el siguiente ejemplo se construye un DataSet, se agrega un objeto DataTable nuevo

al DataSet y, a continuación, se agregan tres objetos DataColumn a la tabla. Por último,

el código establece una columna como columna de clave principal.

Distinguir mayúsculas de minúsculas

Pueden existir dos o más tablas o relaciones con el mismo nombre, pero quedifieran en mayúsculas y minúsculas, en un DataSet . En estos casos, las referencias

a tablas y relaciones por nombre distinguen mayúsculas y minúsculas.

Por ejemplo, si el DataSet  dataSet contiene las tablas Table1 y table1, se hace

referencia por nombre a Table1como dataSet.Tables["Table1"] y se hacereferencia a table1 como dataSet.Tables["table1"]. Si se intentara hacerreferencia a cualquiera de las tablas mediante dataSet.Tables["TABLE1"]se

generaría una excepción.

El comportamiento de distinción entre mayúsculas y minúsculas no se aplica sisólo hay una tabla o relación con un nombre concreto. Por ejemplo, si

el DataSet sólo tieneTable1, se puede hacer referencia a éstamediante dataSet.Tables["TABLE1"].

Compatibilidad con los espacios de nombres

En versiones anteriores de ADO.NET, dos tablas no podían tener el mismo nombre,

aunque se encontrasen en espacios de nombres diferentes. Esta limitación ha

desaparecido en ADO.NET 2.0.

Un DataSet puede contener dos tablas con el mismo valor de

propiedad TableName, pero con valores de propiedad Namespace diferentes.

 Agregar una relación entre tablas

En un DataSet que contiene varios objetos DataTable, es posible utilizarobjetos DataRelation para relacionar una tabla con otra, desplazarse por las tablasy devolver filas secundarias o primarias de una tabla relacionada.

Los argumentos necesarios para crear una DataRelation son un nombre para

la DataRelation que se va a crear y una matriz de una o másreferencias DataColumn a las columnas que actúan como columnas primaria y

Page 14: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 14/24

 

 

ADO NET 13

secundaria en la relación. Una vez creado un objeto DataRelation, es posibleutilizarlo para desplazarse por las tablas y recuperar valores.

Al agregar una DataRelation a una DataSet , se agrega de forma predeterminada

una UniqueConstraint a la tabla primaria y una ForeignKeyConstraint a la tablasecundaria. Para obtener más información sobre cómo crear restricciones,vea Agregar restricciones a una tabla. 

En el siguiente ejemplo de código se crea una DataRelation mediante dosobjetos DataTable en un DataSet . Cada DataTable contiene una columnadenominada CustID, que actúa como vínculo entre los dos objetos DataTable. En

el ejemplo se agrega una única DataRelation a la colección Relations del DataSet .El primer argumento del ejemplo especifica el nombre de la DataRelation que seva a crear. El segundo argumento establece la DataColumn primaria y el tercer

argumento establece la DataColumnsecundaria.

VB

customerOrders.Relations.Add("CustOrders",

customerOrders.Tables["Customers"].Columns["CustID"],customerOrders.Tables["Orders"].Columns["CustID"]);

Una DataRelation tiene también una propiedad Nested que, cuando tiene elvalor true, hace que las filas de la tabla secundaria se aniden dentro de la filaasociada de la tabla primaria cuando se escriben como elementos XML

mediante WriteXml. Para obtener más información, vea Utilizar XML en unDataSet. 

Explorar una relación entre tablas

Una de las principales funciones de una DataRelation es permitir el

desplazamiento de una DataTable a otra dentro de un DataSet. Esto permite

recuperar todos los objetos DataRow relacionados de una DataTable cuando se dauna única DataRow de una DataTable relacionada. Por ejemplo, después de

establecer una DataRelation entre una tabla de clientes y una tabla de pedidos, esposible recuperar todas las filas de pedidos de una fila de clientes determinada

mediante GetChildRows.

En el siguiente ejemplo de código se crea una DataRelation entre la

tabla Customers y la tabla Orders de un DataSet , y se devuelven todos lospedidos de cada cliente.

El ejemplo siguiente se basa en el anterior; se relacionan cuatro tablas y se

exploran dichas relaciones. Como en el ejemplo anterior, CustomerID relaciona latabla Customerscon la tabla Orders. Para cada cliente de la tabla Customers se

determinan todas las filas secundarias de la tabla Orders con el fin de devolver elnúmero de pedidos que tiene un cliente concreto y sus valores de OrderID.

Page 15: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 15/24

 

 

ADO NET 14

El ejemplo ampliado también devuelve los valores de lastablas OrderDetails y Products. La tabla Orders está relacionada con la

tabla OrderDetails mediante OrderID con el fin de determinar, para cada pedidode cliente, qué productos y cantidades se pidieron. Como la

tabla OrderDetails sólo contiene el ProductID de un producto pedido,OrderDetails está relacionada con Products mediante ProductID para devolverel ProductName. En esta relación, Products es la tabla primaria y OrderDetails es la secundaria. Por lo tanto, al recorrer en iteración la

tabla OrderDetails, se llama a GetParentRow para recuperar el valorde ProductName relacionado.

Hay que tener en cuenta que al crear la DataRelation para lastablas Customers y Orders no se especifica ningún valor para el

indicador createConstraints (el valor predeterminado es true). Se supone quetodas las filas de la tabla Orders tienen un valor CustomerID que existe en la tabla

primaria Customers. Si un CustomerID existe en la tabla Orders pero no existe enla tabla Customers, una ForeignKeyConstrain hará que se inicie una excepción.

Cuando la columna secundaria pueda contener valores no incluidos en la columna

primaria, hay que asignar el valor false al indicador createConstraints cuando seagregue laDataRelation. En el ejemplo, el indicador createConstraints tiene el

valor false para la DataRelation entre las tablas Orders y OrderDetails. Esto

permite que la aplicación devuelva todos los registros de la tabla OrderDetails ysólo un subconjunto de registros de la tabla Orders sin generar una excepción entiempo de ejecución. El ejemplo ampliado genera el resultado con el siguiente

formato.

Customer ID: NORTS

Order ID: 10517Order Date: 4/24/1997 12:00:00 AM

Product: Filo MixQuantity: 6

Product: Raclette Courdavault 

Quantity: 4Product: Outback LagerQuantity: 6

Order ID: 11057Order Date: 4/29/1998 12:00:00 AM

Product: Outback LagerQuantity: 3

El siguiente ejemplo de código es un ejemplo ampliado en el que se devuelven los

valores de las tablas OrderDetails y Products, y sólo se devuelve un subconjuntode los registros de la tabla Orders.

Page 16: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 16/24

 

 

ADO NET 15

VB 

DataRelation customerOrdersRelation =customerOrders.Relations.Add( "CustOrders",

customerOrders.Tables["Customers"].Columns["CustomerID"],customerOrders.Tables["Orders"].Columns["CustomerID"]);

DataRelation orderDetailRelation =

customerOrders.Relations.Add( "OrderDetail",customerOrders.Tables["Orders"].Columns["OrderID"],customerOrders.Tables["OrderDetails"].Columns["OrderID"], false);

DataRelation orderProductRelation =customerOrders.Relations.Add( "OrderProducts",

customerOrders.Tables["Products"].Columns["ProductID"],customerOrders.Tables["OrderDetails"].Columns["ProductID"]);

foreach (DataRow custRow in customerOrders.Tables["Customers"].Rows){

Console.WriteLine("Customer ID: " + custRow["CustomerID"]);

foreach (DataRow orderRow in custRow.GetChildRows(customerOrdersRelation

)){

Console.WriteLine(" Order ID: " + orderRow["OrderID"]);

Console.WriteLine("\tOrder Date: " + orderRow["OrderDate"]);

foreach (DataRow detailRow in orderRow.GetChildRows(orderDetailRelation)

)

{Console.WriteLine("\t Product: " +

detailRow.GetParentRow(orderProductRelation)["ProductName"]);Console.WriteLine("\t Quantity: " + detailRow["Quantity"]);

}

}}

Utilizar DataSet con datos existentes

El DataSet es una representación relacional de datos en memoria independiente

del origen de datos. Sin embargo, el DataSet puede utilizarse junto con datos

existentes en un origen de datos cuando se usa con un proveedor de datos de .NETFramework. Un proveedor de datos de .NET Framework utiliza

un DataAdapter para rellenar el DataSet con datos e información de esquema, así

como para resolver modificaciones de los datos en el origen de datos.

Page 17: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 17/24

 

 

ADO NET 16

Consulte los siguientes temas para obtener más información sobre cómo cargarun DataSet y resolver los cambios en el origen de datos:

  Llenar un DataSet desde un DataAdapter. En este tema se describe cómo se

carga un DataSet con datos desde un origen de datos.  Actualizar orígenes de datos con DataAdapters. En este tema se describe cómo

se resuelven los cambios relacionados con los datos de un DataSet en el origen

de datos.

  Agregar restricciones existentes a DataSet. En este tema se describe cómo se

rellena un DataSet con información de clave principal desde un origen de datos.

  Utilizar parámetros con DataAdapter y Especificar parámetros y valores

devueltos. En estos temas se describe cómo asociar columnas de tablas de

un DataSet con parámetros de entrada y salida de comandos ejecutados en un

origen de datos.

El DataSet también puede leer y escribir datos XML existentes. Para obtener más

información, vea Utilizar XML en un DataSet.

DataAdapter EN ADO.NET

 

El objeto de DataAdapter del proveedor de datos de .NET se ajusta la lectura deregistros en un objeto DataSet y actualiza la base de datos del DataSet .El DataAdapter administra objetos Command y DataReader y simplifica el

proceso de sincronización. Puede utilizar el objeto OleDbDataAdapter pararellenar un DataSet desde un objeto de ActiveX Data Objects(ADO) Recordset o Record.

El objeto DataAdapter es simplemente una forma de transferir datos entre unabase de datos y un DataSet . Si necesita más control sobre la funcionalidad deactualización o de relleno, puede escribir una función personalizada para

administrar este proceso y manipular directamente el comando y los

objetos DataReader.

 Arquitectura

El DataAdapter administra varios objetos de comando:

  SelectCommand   DeleteCommand 

  InsertCommand   UpdateCommand 

El DataAdapter incluye tres métodos principales:

  Rellenar. Este método utiliza el DataReader para leer registros y, acontinuación, copia los registros en un DataSet (o un objeto DataTable).

Page 18: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 18/24

 

 

ADO NET 17

Muchas aplicaciones (especialmente aplicaciones basadas en Web) sólorequieren acceso de sólo lectura a los datos. De forma predeterminada,

el DataAdapter recupera sólo la cantidad mínima de esquema que esnecesario (el nombre de columna y el tipo de datos) para admitir

operaciones de sólo lectura. DataAdapter utiliza lapropiedad SelectCommand para devolver un DataReader desde que se leenlos registros.

  FillSchema. Este método consulta información de esquema que es necesariaactualizar la base de datos. Esto incluye las columnas de clave, la capacidadde columnas y así sucesivamente para aceptar NULL.

Para configurar el método Rellenar para recuperar esta información deesquema adicionales, establezca el valor de propiedad se haya dado elvalor MissingSchemaAction.AddWithKey aDataAdapter.MissingSchemaAction.

Puede utilizar SelectCommand para devolver un DataReader desde el quese lee el esquema. Dado que resulta costoso recuperar el esquema

del DataSet , o almacenar el esquema como un archivo de lenguaje demarcado extensible (XML) o utiliza un DataSet con.

  la actualización. Cuando actualiza la base dedatos, DataAdapter comprueba la propiedad RowState de cadaobjeto DataRow en DataTable.

El DataAdapter después llama a DeleteCommand ,InsertCommand o lapropiedad UpdateCommand para cambiar a la base de datos según

corresponda. Puede enlazar el evento RowUpdating y los

eventos RowUpdated para personalizar cómo DataAdapter procesan lasactualizaciones.

El DataAdapter no tiene ninguna información acerca de la base de datos que está

leyendo desde y escribir en; el DataAdapter sólo ejecuta los comandos que

administra. Por lo tanto, el DataAdapter no crea los objetos DataRelation enel DataSet . Para crear objetos DataRelation en el DataSet , debe utilizar uno de los

métodos siguientes:

  Cree los objetos mediante programación en tiempo de ejecución.  Cargar el esquema de un definición de esquemas XML (XSD) archivo.  Crear los objetos en el esquema de DataSet de tiempo de diseño.

Cosas a tener en cuenta

Cuando utilizamos un objeto del tipo DataAdapter (por ejemplo SqlDataAdapter)éste se encarga de crear la conexión a la base de datos, abrir dicha conexión y

después de actualizar los datos también se encarga de cerrar la conexión.

Page 19: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 19/24

 

 

ADO NET 18

Y lo importante es que NUNCA necesitamos un objeto Connection específico (eindependiente) para hacer todo ese proceso de conexión, ya que el adaptador se

encarga de todo ese tema por nosotros.

Pero para que todo esto de las transacciones con un DataAdapter funcione, lomejor es crear nuestro objeto Connection para poder obtener la transacción pormedio del método BeginTransaction (a lo mejor hay otra forma más fácil dehacerlo, pero esta es la que yo conozco y es la que te explico).

El segundo punto que debemos tener en cuenta es que si los comandos deactualización, inserción y eliminación los automatizamos con un objeto del

tipo CommandBuilder tendremos que hacer un pequeño truco para que todo

funcione como debe funcionar, ya que a esos comandos debemos asignarle elobjeto Transaction que hemos obtenido por medio del

método BeginTransaction de la conexión.

Si los comandos de actualización los creamos de forma manual, tendremos que

hacer lo que te expliqué en el artículo anterior para asignar elobjeto Transaction que cada comando debe usar. Aunque esto no es demasiado

útil, al menos si queremos tener la "automatización" que nos da el mododesconectado... pero bueno, que sepas que se puede hacer.

En cualquier caso, solo debemos asignar el objeto de la transacción a los comandosINSERT, UPDATE y DELETE, pero no al de selección. Y si algunos de esos trescomandos no vamos a usarlo, por ejemplo porque no permitamos eliminar datos,

no será necesario crear el comando correspondiente y por tanto no hay queasignarle nada... pero ante la duda... lo mejor es asignarlo a todos, al menos siusamos un objeto SqlCommandBuilder, para que no tengamos un error por falta

de "previsión".

Un ejemplo para usar transacciones con un DataAdapter

Lo mejor es que veamos qué tenemos que hacer para que todo esto que te he

comentado funcione correctamente.

En el siguiente ejemplo sólo veremos la parte en la que se utiliza un

objeto CommandBuilder.

En estos ejemplos voy a usar una base de datos de SQL Server 2005 Express, que es

la misma que ya usé en el ejemplo del artículo anterior.

Nota: 

Por ahora solo te muestro el código de Visual Basic, en otra ocasiónactualizaré el código para incluir el de C#.

Page 20: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 20/24

 

 

ADO NET 19

Aquí solamente veremos la parte de la actualización, es decir, lo que debemosejecutar para actualizar los datos una vez modificados, por tanto este código que

te muestro es cuando ya has modificado los datos... eso no te lo muestro porque enrealidad no cambia con respecto a lo que ya te he explicado en otras ocasiones,

desde el índice de la sección de ADO.NET tienes varios ejemplos de cómo accedera los datos usando un adaptador.

Nota: Hay que tener en cuenta que este código solo es para mostrar los pasos a

dar, ya que antes se han tenido que leer los datos, asignarlos al DataSet oDataTable, y modificarlos de alguna forma que aquí no se muestra (esto lo

aclaro para que después no andes preguntando o diciendo que esto no

cambia nada en la base de datos o que este ejemplo no funciona, y te

puedo asegurar que sí funciona, que yo lo he probado insertando ymodificando datos...)

Paso 1. Creamos el adaptador (y la conexión y el objeto Connection)

El comando SELECT es necesario para que el CommandBuilder sepa cómo debecrear los comandos.

' La cadena de conexión

Dim csb As New SqlConnectionStringBuilderWith csb

' El servidor al que nos conectamos.DataSource = "(local)\SQLEXPRESS"

' La base de datos que vamos a usar

.InitialCatalog = "prueba"' Usamos la seguridad integrada.IntegratedSecurity = True

End With

' Creamos la conexión

' la ponemos dentro de Using para asegurarnos de que se cierre si hay errores

Using con As New SqlConnection(csb.ConnectionString)

Dim dt As New DataTable

' Creamos el adaptador usando el objeto ConnectionDim da As New SqlDataAdapter("SELECT * FROM Table1", con)

da.MissingSchemaAction = MissingSchemaAction.AddWithKey 

Page 21: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 21/24

 

 

ADO NET 20

Paso 2. Creamos los comandos y los asignamos al adaptador, si no lo hacemos deesta forma, al intentar acceder a los comandos desde el objeto del DataAdapter...obtendremos un error indicando que no están creados (son nulos).

' Creamos los comandos con el CommandBuilder

Dim cb As New SqlCommandBuilder(da)

' pero para asignarle el objeto Transaction debemos

' obtenerlos por medio de los métodos Get...Command' ya que si intentamos acceder directamente a esos comandos

' del adaptador nos indicará que no están asignados (son nulos)

da.InsertCommand = cb.GetInsertCommand()da.UpdateCommand = cb.GetUpdateCommand()

da.DeleteCommand = cb.GetDeleteCommand()

Paso 3. Abrimos la conexión y creamos el objeto Transaction llamando almétodo BeginTransaction, y asignamos ese objeto a cada uno de los comandosdel adaptador, salvo al comando de selección.

' Abrimos la conexióncon.Open()

' Creamos el objeto TransactionDim tran As SqlTransaction = con.BeginTransaction

' Asignamos el objeto Transaction a los comandosda.InsertCommand.Transaction = tran

da.UpdateCommand.Transaction = tran

da.DeleteCommand.Transaction = tran

Paso 4. Dentro de un bloque Try/Catch (para detectar los errores) es cuando

actualizamos los datos llamando al métodoUpdate del adaptador. Es importante

que la conexión siga abierta, ya que el objeto de la variable tran depende de esaconexión, pero el adaptador no depende directamente de la conexión abierta en la

variable con, ya que el adaptador gestiona por su cuenta las conexiones y si ve que

está cerrada, la abrirá, pero esa apertura es independiente del objeto que hemosusado para indicarle cuál es la conexión que debe usar... ¡un lío! pero es así...

Hay que tener en cuenta que la "aceptación" de los cambiosdel DataTable (o DataSet ) se hace de forma independiente de la llamada a losmétodos Commit (o Rollback ) del objeto Transaction.

En el caso de que todo vaya bien, el propio método Update del adaptador se

encarga de decirle a la tabla que acepte los cambios, por tanto no es necesariollamar de forma explícita al método AcceptChanges, ya que esa es la forma

Page 22: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 22/24

 

 

ADO NET 21

"predeterminada" de actuar (lee el comentario del código si quieres saber algo másde esto... y, por supuesto, después te lees la documentación para informarte mejor,que con un par de líneas de comentarios no lo vas a aprender todo, jejeje).

Cuando se cancela la actualización (en el bloque Catch del ejemplo), se hace unallamada al método Rollback del objeto Transaction, y también podrías llamar al

método RejectChanges de la tabla, pero esto supondría perder TODAS lasmodificaciones que hayas hecho en los datos que están en memoria. Y debido a que

esos datos están en memoria, puedes volver a actualizarlos posteriormente si así loconsideras necesario. Nuevamente te invito a que leas los comentarios del códigopara que veas qué debes hacer.

Try

' Para probar con un error

If chkProducirError.Checked ThenThrow New Exception("Candemore")

End If 

' Actualizamos los datos de la tablada.Update(dt)

' Si llega aquí es que todo fue bien,

' por tanto, llamamos al método Commit tran.Commit()

' Esto no es necesario si dejamos el valor predeterminado

' de la propiedad AcceptChangesDuringUpdate del adaptadordt.AcceptChanges()

txtInfo.Text = "Se han actualizado los datos"

Catch ex As Exception

' Si hay error, desahacemos lo que se haya hechotran.Rollback()

' Desechar los cambios del DataTable' si así lo estimamos oportuno,

' pero esto obligará a volver a añadir, modificar o eliminar

' nuevamente los datos.' Por tanto, solo debemos hacerlo si no intentaremos nuevamente

' la actualización de los datos.' Yo preguntaría al usuario antes de hacerlo...'dt.RejectChanges()

txtInfo.Text = "ERROR: " & vbCrLf & ex.Message

End Try

Page 23: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 23/24

 

 

ADO NET 22

Paso 5. Finalmente cerramos la conexión, aunque no es necesario hacerlo deforma explícita ya que al incluir el objetoConnection dentro de un bloque Using,

se cerrará automáticamente.

' Cerramos la conexión,' aunque no es necesario ya que al finalizar

' el using se cerrará

con.Close()

End Using

Creación de un SqlDataAdapter 

SqlDataAdapter La clase es una parte de la C # Proveedor de datos de ADO.NET yse encuentra en el System.Data.SqlClient espacio de nombres. SqlDataAdapter

proporciona la comunicación entre el conjunto de datos y la base de datosSQL. Podemos utilizar el objeto SqlDataAdapter en combinación con el objeto

DataSet. DataAdapter proporciona esta combinación por el método de mapeo de

relleno, que cambia los datos en el conjunto de datos para que coincida con losdatos del origen de datos y actualización, que cambia los datos de la fuente dedatos para que coincida con los datos en el conjunto de datos.

SqlDataAdapter adapter = new SqlDataAdapter ();

adapter.Fill (DS);

El objeto SqlDataAdapter y los objetos DataSet son combinan para llevar a cabotanto en el acceso de datos y las operaciones de manipulación de datos en el SQLServer de base de datos. Cuando el usuario realice las operaciones de SQL como

select, insert, etc en los datos que contienen en el conjunto de datos de objetos, noafectará directamente a la base de datos, hasta que el usuario invoca el método de

actualización en los SqlDataAdapter.

using System;using System.Windows.Forms;

using System.Data;

using System.Data.SqlClient;

espacio de nombres WindowsApplication1

{public partial class Form1: Form

{public Form1 ()

Page 24: Ado Net - Informe

5/17/2018 Ado Net - Informe - slidepdf.com

http://slidepdf.com/reader/full/ado-net-informe 24/24

 

 

ADO NET 23

{InitializeComponent ();

}

private void Button1_Click (object sender, EventArgs e){

connetionString cadena = null;SqlConnection sqlCnn;

SqlCommand sqlcmd;SqlDataAdapter adapter = new SqlDataAdapter ();DataSet ds = new DataSet ();

int i = 0;

string sql = null;

connetionString = "Data Source = ServerName; Initial Catalog =DatabaseName, ID de usuario = nombre de usuario, contraseña = contraseña";

sql = "Select * from producto";

sqlCnn = new SqlConnection (connetionString);

tratar de{

sqlCnn.Open ();

sqlcmd = new SqlCommand (sql, sqlCnn);adapter.SelectCommand = sqlcmd;adapter.Fill (DS);

for (i = 0; i <= ds.Tables [0] Rows.Count - 1;. i + +){

MessageBox.Show (.. Ds.Tables [0] filas [i] ItemArray [0] + "-" +

ds.Tables [0] filas [i] ItemArray [1]..);

}adapter.Dispose ();

sqlCmd.Dispose ();sqlCnn.Close ();

}

catch (Exception ex){

MessageBox.Show ("No se puede abrir la conexión");}

}

}}