Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ADO Net
ADO Net
NET
ADO.NET proporciona acceso coherente a orgenes de datos como Microsoft SQL Server y XML, as como a orgenes de datos expuestos mediante OLE DB y ODBC. Las aplicaciones para usuarios que comparten datos pueden utilizar ADO.NET para conectar a estos orgenes de datos y recuperar, manipular y actualizar los datos contenidos. ADO.NET separa el acceso a datos de la manipulacin de datos y crea componentes discretos que se pueden utilizar por separado o conjuntamente. ADO.NET incluye proveedores de datos de .NET Framework para conectarse a una base de datos, ejecutar comandos y recuperar resultados. Los resultados se procesan directamente o se colocan en un objeto DataSet de ADO.NET con el fin de exponerlos al usuario para un propsito especfico, combinados con datos de varios orgenes, o de utilizarlos de forma remota entre niveles. El objeto DataSet de ADO.NET tambin puede utilizarse independientemente de un proveedor de datos de .NET Framework para administrar datos que son locales de la aplicacin o que proceden de un origen XML. Las clases de ADO.NET se encuentran en el archivo System.Data.dll y estn integradas con las clases de XML que se encuentran en el archivo System.Xml.dll. Cuando se compila un cdigo que utiliza el espacio de nombres System.Data, es necesario hacer referencia a los archivos System.Data.dll y System.Xml.dll. Para obtener un ejemplo de una aplicacin de ADO.NET que se conecta a una base de datos, recupera datos de sta y, a continuacin, los muestra en el smbolo del sistema, vea Aplicacin de ejemplo de ADO.NET. ADO.NET proporciona funcionalidad a los programadores que escriben cdigo administrado similar a la funcionalidad que los objetos ADO (ActiveX Data Objects) proporcionan a los programadores de modelo de objetos componentes (COM) nativo. Para obtener ms informacin sobre las diferencias entre ADO y ADO.NET, vea ADO.NET for the ADO Programmer en MSDN.
Aprovechar la tecnologa de objetos ADO (ActiveX Data Objects) actuales. Admitir el modelo de programacin n-tier Integrar la compatibilidad con XML
Arquitectura de ADO.NET
Tradicionalmente, el procesamiento de datos ha dependido principalmente de un modelo de dos niveles basado en una conexin. A medida que el procesamiento de datos utiliza cada vez ms arquitecturas de varios niveles, los programadores estn pasando a un enfoque sin conexin con el fin de proporcionar una escalabilidad mejor para sus aplicaciones.
Componentes de ADO.NET
Existen dos componentes de ADO.NET que se pueden utilizar para obtener acceso a datos y manipularlos:
Proveedores de datos de .NET Framework Los proveedores de datos de .NET Framework son componentes diseados explcitamente para la manipulacin de datos y el acceso rpido a datos de slo lectura y slo avance. El objeto Connection proporciona conectividad a un origen de datos. El objeto Command permite tener acceso a comandos de base de datos para devolver datos, modificar datos, ejecutar procedimientos almacenados y enviar o recuperar informacin sobre parmetros. El objeto DataReader proporciona una secuencia de datos de alto rendimiento desde el origen de datos. Por ltimo, el objeto DataAdapter proporciona el puente entre el objeto DataSet y el origen de datos. El DataAdapter utiliza objetos Command para ejecutar comandos SQL en el origen de datos tanto para cargar el DataSet con datos como para reconciliar en el origen de datos los cambios aplicados a los datos incluidos en el DataSet.
DataSet El DataSet de ADO.NET est expresamente diseado para el acceso a datos independientemente del origen de datos. Como resultado, se puede utilizar con mltiples y distintos orgenes de datos, con datos XML o para administrar datos locales de la aplicacin. El DataSet contiene una coleccin de uno o ms objetos DataTable formados por filas y columnas de datos, as como informacin sobre claves principales, claves externas, restricciones y relaciones relativa a los datos incluidos en los objetos DataTable. En el diagrama siguiente se ilustra la relacin entre un proveedor de datos de .NET Framework y un DataSet. Arquitectura de ADO.NET
Almacene datos en la memoria cach de la aplicacin para poder manipularlos. Si solamente necesita leer los resultados de una consulta, el DataReader es la mejor eleccin. Utilizar datos de forma remota entre un nivel y otro o desde un servicio Web XML. Interactuar con datos dinmicamente, por ejemplo para enlazar con un control de formularios Windows Forms o para combinar y relacionar datos procedentes de varios orgenes. Realizar procesamientos exhaustivos de datos sin necesidad de tener una conexin abierta con el origen de datos, lo que libera la conexin para que la utilicen otros clientes.
Si no necesita la funcionalidad proporcionada por el DataSet, puede mejorar el rendimiento de su aplicacin si utiliza el DataReader para devolver sus datos de slo avance y de slo lectura. Aunque el DataAdapter utiliza el DataReader para rellenar el contenido de un DataSet (vea Llenar un DataSet desde un DataAdapter), al utilizar el DataReader puede mejorar el rendimiento porque no usar la memoria que utilizara el DataSet, adems de evitar el procesamiento necesario para crear y rellenar el contenido de DataSet.
XML y ADO.NET
ADO.NET aprovecha la eficacia de XML para proporcionar acceso a datos sin mantener una conexin abierta. ADO.NET fue diseado teniendo en cuenta las clases de XML incluidas en .NET Framework; ambos son componentes de una nica arquitectura. ADO.NET y las clases de XML incluidas en .NET Framework convergen en el objeto DataSet. El DataSet se puede llenar con datos procedentes de un origen XML, ya sea ste un archivo o una secuencia XML. El DataSet se puede escribir como XML compatible con el del Consorcio World Wide Web (W3C), incluyendo su esquema como esquema XSD (Lenguaje de definicin de esquemas XML), independientemente del origen de los datos incluidos en el DataSet. Puesto que el formato nativo de serializacin del DataSet es XML, es un medio excelente para mover datos de un nivel a otro, por lo que el DataSet es idneo para utilizar datos y contextos de esquemas de interaccin remota desde y hacia un servicio Web XML.
Nota El proveedor de datos de .NET Framework para OLE DB y el proveedor de datos de .NET Framework para ODBC requieren MDAC 2.6 o posterior y se recomienda MDAC 2.8 Service Pack 1 (SP1). Puede descargar MDAC 2.8 SP1 de Data Access and Storage Developer Center. En el siguiente ejemplo de cdigo se muestra cmo incluir el espacio de nombres System.Data en las aplicaciones, para poder utilizar ADO.NET: Visual Basic Copiar cdigo
Proveedor de datos de .NET Framework Proveedor de datos de .NET Framework para SQL Server Proveedor de datos de .NET Framework para OLE DB Proveedor de datos de .NET Framework para ODBC Proveedor de datos de .NET Framework para Oracle Nota
Descripcin Proporciona acceso de datos para Microsoft SQL Server versin 7.0 o posterior. Utiliza el espacio de nombres System.Data.SqlClient. Para orgenes de datos que se exponen mediante OLE DB. Utiliza el espacio de nombres System.Data.OleDb. Para orgenes de datos que se exponen mediante ODBC. Utiliza el espacio de nombres System.Data.Odbc. Para orgenes de datos de Oracle. El proveedor de datos de .NET Framework para Oracle es compatible con la versin 8.1.7 y posteriores del software de cliente de Oracle y utiliza el espacio de nombres System.Data.OracleClient.
El proveedor de datos de .NET Framework para ODBC y el proveedor de datos de .NET Framework para Oracle no se incluyeron originalmente en la versin 1.0 de .NET Framework. Si necesita utilizar el proveedor de datos de .NET Framework para ODBC o para Oracle, y est utilizando la versin 1.0 de .NET Framework, puede descargar dichos proveedores desde el sitio Data Access and Storage Developer Center. El espacio de nombres del proveedor de datos de .NET Framework para ODBC descargado es Microsoft.Data.Odbc. El espacio de nombres del proveedor de datos de .NET Framework para Oracle descargado es System.Data.OracleClient.
Descripcin Establece una conexin a un origen de datos determinado. La clase base para todos los objetos Connection es DbConnection. Ejecuta un comando en un origen de datos. Expone Parameters y puede ejecutarse en el mbito de un objeto Transaction de Connection. La clase base para todos los objetos Command es DbCommand.
DataReader Lee una secuencia de datos de slo avance y slo lectura desde un origen de datos. La clase base para todos los objetos DataReader es DbDataReader. DataAdapte Llena un DataSet y realiza las actualizaciones necesarias en el origen de datos. La clase base para todos los objetos DataAdapter es r DbDataAdapter.
Adems de las clases principales citadas en la tabla anterior, los proveedores de datos de .NET Framework tambin incluyen las que se enumeran en la tabla siguiente.
Descripcin Permite incluir comandos en las transacciones que se realizan en el origen de datos. La clase base para todos los objetos Transaction es DbTransaction. Un objeto auxiliar que genera automticamente las propiedades de comando de un DataAdapter o que obtiene de un procedimiento almacenado informacin acerca de parmetros con la que puede rellenar la coleccin Parameters de un objeto Command. La clase base para todos los objetos CommandBuilder es DbCommandBuilder.
ConnectionStringBuilder Un objeto auxiliar que proporciona un modo sencillo de crear y administrar el contenido de las cadenas de conexin utilizadas por los objetos Connection. La clase base para todos los objetos ConnectionStringBuilder es DbConnectionStringBuilder.
Parameter Exception
Define los parmetros de entrada, salida y valores devueltos para los comandos y procedimientos almacenados. La clase base para todos los objetos Parameter es DbParameter. Se devuelve cuando se detecta un error en el origen de datos. En el caso de que el error se detecte en el cliente, los proveedores de datos de .NET Framework inician una excepcin de .NET Framework. La clase base para todos los objetos Exception es DbException. Expone la informacin relacionada con una advertencia o error devueltos por un origen de datos. Se proporciona para los atributos de seguridad de acceso a cdigo de los proveedores de datos de .NET Framework. La clase base para todos los objetos ClientPermission es DBDataPermission.
Error ClientPermission
Nota El proveedor de datos de .NET Framework para ODBC cuenta con una arquitectura similar a la del proveedor de datos de .NET Framework para OLE DB; por ejemplo, llama a un componente de servicio ODBC.
Comparacin entre el proveedor de datos de .NET Framework para SQL Server y el proveedor de datos de .NET Framework para OLE DB
Para utilizar el proveedor de datos de .NET Framework para SQL Server, debe tener acceso a SQL Server 7.0 o posterior. Las clases del proveedor de datos de .NET Framework para SQL Server se encuentran en el espacio de nombres System.Data.SqlClient. Para las versiones anteriores de SQL Server, utilice el proveedor de datos de .NET Framework para OLE DB con el proveedor OLE DB de SQL Server (SQLOLEDB). El proveedor de datos de .NET Framework para SQL Server admite tanto transacciones locales como distribuidas. En el caso de las transacciones distribuidas, el proveedor de datos de .NET Framework para SQL Server se inscribe automticamente y de forma predeterminada en una transaccin y obtiene los detalles de la misma desde los servicios de componentes de Windows o System.Transactions. Para obtener ms informacin, vea Realizacin de transacciones. En el siguiente ejemplo de cdigo se muestra cmo puede incluir el espacio de nombres System.Data.SqlClient en sus aplicaciones. Visual Basic Copiar cdigo
Proveedor Proveedor OLE DB para SQL Server de Microsoft Proveedor OLE DB para Oracle de Microsoft Proveedor OLE DB para Microsoft Jet
No se recomienda el uso de una base de datos de Access (Jet) como origen de datos de aplicaciones multiproceso, como las aplicaciones ASP.NET. Si tiene que utilizar Access como origen de datos de una aplicacin ASP.NET, y no puede utilizar otra alternativa, como SQL Server o MSDE, tenga presente que las aplicaciones ASP.NET que se conectan a una base de datos de Access pueden presentar problemas de conexin, normalmente relacionados con los permisos de seguridad. Para obtener ayuda a la hora de solucionar los problemas de conexin que puedan presentarse al utilizar una base de datos de Access y ASP.NET, vea el artculo Q316675, "PRB: No puede conectar a base de datos de Access desde ASP.NET" en Microsoft Knowledge Base. El proveedor de datos de .NET Framework para OLE DB no admite las interfaces de la versin 2.5 de OLE DB. Los proveedores OLE DB que requieren compatibilidad con interfaces de la versin 2.5 de OLE DB no funcionarn correctamente con el proveedor de datos de .NET Framework para OLE DB. Entre ellos se incluye el proveedor OLE DB para Exchange de Microsoft y el proveedor OLE DB para Publicacin en Internet de Microsoft. El proveedor de datos de .NET Framework para OLE DB no funciona con el proveedor OLE DB para ODBC (MSDASQL). Para tener acceso a un origen de datos de ODBC mediante ADO.NET, utilice el proveedor de datos de .NET Framework para ODBC. Las clases del proveedor de datos de .NET Framework para OLE DB se encuentran en el espacio de nombres System.Data.OleDb. En el siguiente ejemplo de cdigo se muestra cmo puede incluir el espacio de nombres System.Data.OleDb en sus aplicaciones. Visual Basic Copiar cdigo
En la siguiente tabla se muestran los controladores ODBC que se han probado con ADO.NET.
Controlador SQL Server Microsoft ODBC para Oracle Microsoft Access Driver (*.mdb) Las clases del proveedor de datos de .NET Framework para ODBC se encuentran en el espacio de nombres System.Data.Odbc. En el siguiente ejemplo de cdigo se muestra cmo puede incluir el espacio de nombres System.Data.Odbc en sus aplicaciones. Visual Basic Copiar cdigo
Notas Recomendado para aplicaciones de nivel medio que utilizan Microsoft SQL Server 7.0 o posterior. Recomendado para aplicaciones de un nico nivel que utilizan Microsoft Database Engine (MSDE) o Microsoft SQL Server 7.0 o posterior. Recomendado en lugar de utilizar el proveedor OLE DB para SQL Server (SQLOLEDB) con el proveedor de datos de .NET Framework para OLE DB. En el caso de la versin 6.5 y versiones anteriores de SQL Server, debe utilizar el proveedor OLE DB para SQL Server con el proveedor de datos de .NET Framework para OLE DB. Recomendado para aplicaciones de nivel medio que utilizan SQL Server 6.5 o anterior. Para SQL Server 7.0 o posterior, se recomienda el proveedor de datos de .NET Framework para SQL Server. Tambin se recomienda para aplicaciones de un nico nivel que utilizan bases de datos de Microsoft Access. No se recomienda el uso de bases de datos Access para una aplicacin de nivel medio. Recomendado para aplicaciones de un nico nivel y de nivel medio que utilizan orgenes de datos de ODBC. Recomendado para aplicaciones de un nico nivel y de nivel medio que utilizan orgenes de datos de Oracle.
Proveedor de datos de .NET Framework para ODBC Proveedor de datos de .NET Framework para Oracle
DataSet de ADO.NET
El objeto DataSet es esencial para la compatibilidad con situaciones de datos distribuidos desconectados con ADO.NET. El DataSet es una representacin de datos residente en memoria que proporciona un modelo de programacin relacional coherente con independencia del origen de datos. Se puede utilizar con muchos y distintos orgenes de datos, con datos XML o para administrar datos locales de la aplicacin. El DataSet representa un conjunto completo de datos que incluye tablas relacionadas y restricciones, as como relaciones entre las tablas. En la siguiente ilustracin se muestra el modelo de objetos DataSet. Modelo de objetos DataSet
Los mtodos y objetos de un DataSet concuerdan con los del modelo de base de datos relacional.
El DataSet tambin puede mantener y recargar su contenido como XML y su esquema como esquema de lenguaje de definicin de esquemas XML (XSD). Para obtener ms informacin, vea Utilizar XML en un DataSet.
DataTableCollection
Un DataSet de ADO.NET contiene una coleccin de cero o ms tablas representadas por objetos DataTable. La DataTableCollection contiene todos los objetos DataTable de un DataSet. La DataTable se define en el espacio de nombres System.Data y representa una nica tabla de datos residentes en memoria. Contiene una coleccin de columnas representadas por una DataColumnCollection, as como restricciones representadas por una ConstraintCollection, que juntas definen el esquema de la tabla. Una DataTable tambin contiene una coleccin de filas representadas por la DataRowCollection, que contiene los datos de la tabla. Una DataRow conserva, junto con su estado actual, sus versiones actual y original para identificar los cambios en los valores almacenados en la fila.
DataRelationCollection
Un DataSet contiene relaciones en su objeto DataRelationCollection. Una relacin, representada por el objeto DataRelation, asocia las filas de una DataTable con las filas de otra DataTable. Las relaciones son anlogas a las rutas de acceso de unin que podran existir entre columnas de claves principales y externas en una base de datos relacional. Una DataRelation identifica las columnas coincidentes en dos tablas de un DataSet. Las relaciones permiten el desplazamiento entre tablas de un DataSet. Los elementos esenciales de una DataRelation son el nombre de la relacin, el nombre de las tablas que se relacionan y las columnas relacionadas de cada tabla. Es posible crear relaciones con ms de una columna por tabla si se especifica una matriz de objetos DataColumn como columnas de claves. Cuando agrega una relacin al DataRelationCollection, puede agregar opcionalmente una UniqueKeyConstraint y una ForeignKeyConstraint para imponer restricciones de integridad cuando se realizan cambios en valores de columna relacionados.
ExtendedProperties
DataSet, DataTable y DataColumn tienen todos una propiedad ExtendedProperties. ExtendedProperties es una PropertyCollection en la que puede colocar informacin personalizada, como la instruccin SELECT que se ha utilizado para generar el conjunto de resultados o la hora en que se generaron los datos. La coleccin ExtendedProperties se mantiene con la informacin de esquema del DataSet.
SqlClient
Opt ion Exp l i c i t On Opt ion St r i c t On Impor t s Sys tem Impor t s Sys tem.Data Impor t s Sys tem.Data .Sq lC l i en t Pub l i c C lass Prog ram Pub l i c Shared Sub Main ( ) Dim connec t ionS t r ing As St r ing = GetConnec t ionS t r ing ( ) Dim queryS t r ing As St r ing = _ "SELECT Category ID , CategoryName FROM dbo .Ca tegor ies ; " Us ing connec t ion As New Sq lConnec t ion (connec t ionS t r ing ) Dim com mand As Sq lCom mand = connec t ion .C rea teCom mand( ) com mand .Com mandTex t = queryS t r ing Try connec t ion .Open( ) Dim dataReader As Sq lDa taReader = _ com mand .Execu teReader ( ) Do W le dataReade r .Read ( ) hi Conso le .Wr i teL ine (vbTab & "{0}" & vbTab & "{1}" , _ dataReader (0 ) , dataReader (1 ) ) Loop dataReade r .C lose ( ) Catch ex As Excep t ion Conso le .Wr i teL ine (ex .Message) End Try End Us ing End Sub Pr i va te Shared Func t ion GetConnec t ionS t r ing ( ) As St r ing ' To avo id s to r ing the connec t ion s t r ing i n your code , ' you can re t r i eve i t f rom a con f igu ra t i on f i l e . Retu rn "Da ta Source=( loca l ) ; I n i t i a l Cata log=Nor thw ind ; " _ & " In teg ra ted Secur i t y=SSP I ; " End Func t ion End C lass
Cierre de conexiones
Recomendamos cerrar siempre la conexin cuando termine de utilizarla, para que la conexin pueda regresar al grupo. El bloque Using de Visual Basic o C# elimina automticamente la conexin cuando el cdigo sale del bloque, incluso en el caso de una excepcin no controlada. Tambin puede utilizar los mtodos Close o Dispose del objeto de conexin correspondiente al proveedor que est utilizando. Es posible que las conexiones que no se cierran explcitamente no se puedan agregar ni puedan regresar al grupo. Por ejemplo, una conexin que se ha salido del mbito pero que no se ha cerrado explcitamente slo se devolver al grupo de conexin si se ha alcanzado el tamao mximo del grupo y la conexin an es vlida. Para obtener ms informacin, vea Descripcin de agrupacin de conexiones.
Nota No llame a Close o a Dispose en un objeto Connection, un objeto DataReader o cualquier otro objeto administrado en el mtodo Finalize de la clase. En un finalizador, libere slo los recursos no administrados que pertenezcan directamente a su clase. Si la clase no dispone de recursos no administrados, no incluya un mtodo Finalize en la definicin de clase. Para obtener ms informacin, vea Recoleccin de elementos no utilizados.
' Assumes connectionString is a valid connection string. Using connection As New SqlConnection(connectionString)
Ejecutar un comando
El objeto Command expone varios mtodos Execute que puede utilizar para llevar a cabo la accin deseada. Cuando los resultados se devuelven en forma de secuencia de datos, puede utilizar ExecuteReader para devolver un objeto DataReader. ExecuteScalar sirve para devolver un valor Singleton. ExecuteNonQuery se utiliza para ejecutar comandos que no devuelven filas. Al utilizar el objeto Command con un procedimiento almacenado, puede establecer la propiedad CommandType del objeto Command para que tenga el valor StoredProcedure. Cuando CommandType tiene el valor StoredProcedure, puede utilizar la propiedad Parameters del objeto Command para tener acceso a los parmetros de entrada y de salida y a los valores devueltos. Puede acceder a la propiedad Parameters independientemente del mtodo Execute llamado. Sin embargo, al llamar a ExecuteReader, no es posible el acceso a los valores devueltos y los parmetros de salida hasta que se cierra DataReader. En el siguiente ejemplo de cdigo se muestra cmo crear un objeto SqlCommand para devolver una lista de categoras de la base de datos de ejemplo Northwind de SQL Server.
Ejemplo
' nwindConn is assumed to be a valid SqlConnection object. Dim command As SqlCommand = New SqlCommand( _ "SELECT CategoryID, CategoryName FROM dbo.Categories", nwindConn)
Para llamar a un procedimiento almacenado, establezca el CommandType del objeto Command como StoredProcedure. Al asignar el valor StoredProcedure a CommandType, puede utilizar la coleccin Parameters para definir parmetros, como se muestra en el ejemplo siguiente.
' Assumes that connection is a valid SqlConnection object. Dim salesCommand As SqlCommand = New SqlCommand( _ "SalesByCategory", connection) salesCommand.CommandType = CommandType.StoredProcedure Dim parameter As SqlParameter = salesCommand.Parameters.Add( _ "@CategoryName", SqlDbType.NVarChar, 15) parameter.Value = "Beverages" connection.Open() Dim reader As SqlDataReader = salesCommand.ExecuteReader() Console.WriteLine("{0}, {1}", reader.GetName(0), reader.GetName(1)) Do While reader.Read() Console.WriteLine("{0}, ${1}", reader.GetString(0), reader.GetDecimal(1)) Loop reader.Close() connection.Close()
Puede utilizar el mtodo Read del objeto DataReader para obtener una fila a partir de los resultados de una consulta. Para tener acceso a cada columna de la fila devuelta, puede pasar a DataReader el nombre o referencia numrica de la columna en cuestin. Sin embargo, el mejor rendimiento se logra con los mtodos que ofrece DataReader y que permiten tener acceso a los valores de las columnas en sus tipos de datos nativos (GetDateTime, GetDouble, GetGuid, GetInt32, etc). Para obtener una lista de mtodos de descriptor de acceso con tipo para DataReaders de proveedores de datos especficos, vea las secciones OleDbDataReader y SqlDataReader. Si se utilizan los mtodos de descriptor de acceso con tipo, dando por supuesto que se conoce el tipo de datos subyacentes, se reduce el nmero de conversiones de tipo necesarias para recuperar el valor de una columna.
En el ejemplo de cdigo siguiente se repite por un objeto DataReader y se devuelven dos columnas de cada fila.
If reader.HasRows Then Do While reader.Read() Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", reader.GetInt32(0), reader.GetString(1)) Loop Else Console.WriteLine("No rows returned.") End If reader.Close()
DataReader proporciona una secuencia de datos sin bfer que permite a la lgica de los procedimientos procesar eficazmente y de forma secuencial los resultados procedentes de un origen de datos. DataReader es la mejor opcin cuando se trata de recuperar grandes cantidades de datos, ya que stos no se almacenan en la memoria cach.
Cerrar el DataReader
Siempre debe llamar al mtodo Close cuando haya terminado de utilizar el objeto DataReader. Si Command contiene parmetros de salida o valores devueltos, stos no estarn disponibles hasta que se cierre el DataReader. Tenga en cuenta que mientras est abierto un DataReader, ste utiliza de forma exclusiva el objeto Connection. No se podr ejecutar ningn comando para el objeto Connection hasta que se cierre el DataReader original, incluida la creacin de otro DataReader.
Nota No llame a Close o Dispose para objetos Connection o DataReader ni para ningn otro objeto administrado en el mtodo Finalize de su clase. En un finalizador, libere slo los recursos no administrados que pertenezcan directamente a su clase. Si la clase no dispone de recursos no administrados, no incluya un mtodo Finalize en la definicin de clase. Para obtener ms informacin, consulte Recoleccin de elementos no utilizados.
El mtodo Fill utiliza el objeto DataReader de forma implcita para devolver los nombres y tipos de columna utilizados para crear las tablas de DataSet, as como los datos para llenar las filas de las tablas de DataSet. Las tablas y columnas slo se crean cuando no existen; en caso contrario, Fill utiliza el esquema existente de DataSet. Los tipos de columna se crean como tipos de .NET Framework conforme se indica en las tablas que aparecen en Asignar los tipos de datos del proveedor de datos de .NET para los tipos de datos de .NET Framework. No se crean claves principales a menos que existan en el origen de datos y se haya dado el valor MissingSchemaAction.AddWithKey a DataAdapter.MissingSchemaAction. Si el mtodo Fill determina que una tabla tiene clave principal, sobrescribe los datos del DataSet con los del origen de datos en aquellas filas en las que los valores de la columna de clave principal coincidan con los de la fila que devuelve el origen de datos. Si no se detecta ninguna clave principal, los datos se anexan a las tablas del DataSet. Fill utiliza cualquier asignacin que pueda existir al llenar el DataSet (vea Configurar las asignaciones de DataTable y DataColumn).
Nota Si SelectCommand devuelve los resultados de una combinacin externa (OUTER JOIN), DataAdapter no establecer un valor PrimaryKey para la tabla DataTable resultante. Es necesario definir PrimaryKey para asegurarse de que las filas duplicadas se resuelven correctamente. Para obtener ms informacin, vea Definir una clave principal para una tabla. En el ejemplo de cdigo siguiente se crea una instancia de un SqlDataAdapter que utiliza un objeto SqlConnection a la base de datos Northwind de Microsoft SQL Server y llena una DataTable en un DataSet con la lista de clientes. La instruccin SQL y los argumentos SqlConnection pasados al constructor SqlDataAdapter se utilizan para crear la propiedad SelectCommand del SqlDataAdapter.
Ejemplo
' Assumes that connection is a valid SqlConnection object. Dim queryString As String = _ "SELECT CustomerID, CompanyName FROM dbo.Customers" Dim adapter As SqlDataAdapter = New SqlDataAdapter( _ queryString, connection) Dim customers As DataSet = New DataSet adapter.Fill(customers, "Customers")
DataAdapter dispone de cuatro propiedades que se utilizan para recuperar y actualizar datos en un origen de datos: la propiedad SelectCommand devuelve datos a partir del origen de datos; las propiedadesInsertCommand, UpdateCommand y DeleteCommand se utilizan para administrar cambios en el origen de datos. La propiedad SelectCommand se debe establecer antes de llamar al mtodo Fill de DataAdapter. Es necesario establecer las propiedades InsertCommand, UpdateCommand o DeleteCommand antes de llamar al mtodo Update del DataAdapter, en funcin de las modificaciones realizadas en los datos en el DataSet [ http://msdn2.microsoft.com/eses/library/system.data.dataset(VS.80).aspx ] . Por ejemplo, si se han agregado filas, se debe establecer la propiedad InsertCommand antes de llamar a Update. Cuando Update procesa una fila insertada, actualizada o eliminada, DataAdapter utiliza la propiedad Command adecuada para la accin en cuestin. La informacin actual relacionada con la fila modificada se pasa al objeto Command a travs de la coleccin Parameters. Al actualizar una fila en el origen de datos, se llama a la instruccin UPDATE que utiliza un identificador nico para identificar la fila de la tabla que debe actualizarse. El identificador nico suele ser el valor del campo de clave principal. La instruccin UPDATE utiliza parmetros que contienen el identificador nico y las columnas y valores que se van a actualizar, como muestra la siguiente instruccin Transact-SQL.