Capturar filasFetching Rows

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed Instance síAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics síAlmacenamiento de datos paralelosParallel Data WarehouseyesAlmacenamiento de datos paralelosParallel Data WarehouseSe aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) SíAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database SíInstancia administrada de Azure SQLAzure SQL Managed InstanceYesInstancia administrada de Azure SQLAzure SQL Managed Instance síAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics síAlmacenamiento de datos paralelosParallel Data WarehouseyesAlmacenamiento de datos paralelosParallel Data Warehouse

DescargarDescargar controlador de OLE DBDownloadDownload OLE DB Driver

La interfaz IRowset es la interfaz de conjunto de filas base.The IRowset interface is the base rowset interface. La interfaz IRowset proporciona métodos para capturar filas secuencialmente, obtiene los datos de esas filas y administra las filas.The IRowset interface provides methods for fetching rows sequentially, getting the data from those rows, and managing rows. Los consumidores usan los métodos de IRowset para todas las operaciones básicas de conjunto de filas.Consumers use the methods in IRowset for all basic rowset operations. Esto incluye la captura y liberación de filas y la obtención de los valores de columna.This includes fetching and releasing rows and getting column values.

Cuando un consumidor obtiene un puntero de interfaz en un conjunto de filas, el primer paso normalmente es determinar las funciones del conjunto de filas con el método IRowsetInfo::GetProperties.When a consumer obtains an interface pointer on a rowset, the first step is ordinarily to determine the capabilities of the rowset by using the IRowsetInfo::GetProperties method. Esto devuelve información acerca de las interfaces expuestas por el conjunto de filas y también de las capacidades del conjunto de filas que no se presentan como interfaces distintas, como el número máximo de filas activas y el número de filas que pueden tener actualizaciones pendientes al mismo tiempo.This returns information about the interfaces exposed by the rowset and also capabilities of the rowset that do not show up as distinct interfaces, such as the maximum number of active rows and the number of rows that can have pending updates at the same time.

El paso siguiente para los consumidores es determinar las características, o los metadatos, de las columnas del conjunto de filas.The next step for consumers is to determine the characteristics, or metadata, of the columns in the rowset. Para esto, usan el método IColumnsInfo para la información de columna simple o el método IColumnsRowset para la información de columna extendida.For this they use the IColumnsInfo method for simple column information or the IColumnsRowset method for extended column information. El método GetColumnInfo devuelve la información siguiente:The GetColumnInfo method returns the following information:

  • El número de columnas del conjunto de resultados.The number of columns in the result set.

  • Una matriz de estructuras DBCOLUMNINFO, una por columna.An array of DBCOLUMNINFO structures, one per column.

    El orden de las estructuras es el orden en que las columnas aparecen en el conjunto de filas.The order of the structures is the order in which the columns appear in the rowset. Cada estructura DBCOLUMNINFO incluye los metadatos de columna, como el nombre de la columna, el ordinal de la columna, la longitud máxima posible de un valor de la columna, el tipo de datos de la columna, la precisión y la longitud.Each DBCOLUMNINFO structure includes column metadata, such as column name, ordinal of the column, maximum possible length of a value in the column, data type of the column, precision, and length.

  • El puntero a un almacenamiento para todos los valores de cadena dentro de un bloque de asignación único.The pointer to a storage for all string values within a single allocation block.

El consumidor determina qué columnas necesita basándose en los metadatos o en el comando de texto que generó el conjunto de filas.The consumer determines which columns it needs either from the metadata or based on the text command that generated the rowset. Determina los ordinales de las columnas necesarias de la clasificación de la información de columna devuelta por IColumnsInfo o de los ordinales del conjunto de filas de metadatos de columna devueltos por IColumnsRowset.It determines the ordinals of the needed columns from the ordering of the column information returned by IColumnsInfo or from the ordinals in the column metadata rowset returned by IColumnsRowset.

Las interfaces IColumnsInfo e IColumnsRowset se usan para extraer información sobre las columnas del conjunto de filas.The IColumnsInfo and IColumnsRowset interfaces are used to extract information about the columns in the rowset. La interfaz IColumnsInfo devuelve un conjunto limitado de información, mientras que IColumnsRowset proporciona todos los metadatos.The IColumnsInfo interface returns a limited set of information, whereas IColumnsRowset provides all the metadata.

Nota

En SQL ServerSQL Server versión 7.0 y anteriores, la columna de metadatos opcional DBCOLUMN_COMPUTEMODE devuelta por IColumnsInfo::GetColumnsInfo devuelve DBSTATUS_S_ISNULL (en lugar de los valores que describen si se calcula la columna) porque no se puede determinar si se calcula la columna subyacente.In SQL ServerSQL Server version 7.0 and earlier, the optional metadata column DBCOLUMN_COMPUTEMODE returned by IColumnsInfo::GetColumnsInfo returns DBSTATUS_S_ISNULL (instead of the values describing whether the column is computed) because it cannot be determined whether the underlying column is computed.

Los ordinales se utilizan para especificar un enlace a una columna.The ordinals are used to specify a binding to a column. Un enlace es una estructura que asocia un elemento de la estructura del consumidor a una columna.A binding is a structure that associates an element of the consumer's structure with a column. El enlace puede enlazar el valor de datos, la longitud y el valor de estado de la columna.The binding can bind the data value, length, and status value of the column.

Un conjunto de enlaces se reúne en un descriptor de acceso.A set of bindings is gathered together in an accessor. Esto se crea con el método IAccessor::CreateAccessor.This is created by using the IAccessor::CreateAccessor method. Un descriptor de acceso puede contener varios enlaces para que se puedan recuperar los datos de varias columnas o establecerse en una llamada única.An accessor can contain multiple bindings so that the data for multiple columns can be retrieved or set in a single call. El consumidor puede crear varios descriptores de acceso para coincidir con modelos de uso distintos en distintas partes de la aplicación.The consumer can create several accessors to match different usage patterns in different parts of the application. Puede crear y liberar los descriptores de acceso mientras que el conjunto de filas sigue existiendo.It can create and release accessors while the rowset remains in existence.

Para capturar filas de la base de datos, el consumidor llama a un método, como IRowset::GetNextRows o IRowsetLocate::GetRowsAt.To fetch rows from the database, the consumer calls a method, such as IRowset::GetNextRows or IRowsetLocate::GetRowsAt. Estas operaciones de captura colocan los datos de filas del servidor en el búfer de filas del proveedor.These fetch operations put row data from the server into the row buffer of the provider. El consumidor no tiene acceso directo al búfer de filas del proveedor.The consumer does not have direct access to the row buffer of the provider. El consumidor usa IRowset::GetData para copiar los datos del búfer del proveedor en el búfer del consumidor e IRowsetChange::SetData para copiar los cambios de datos del búfer del consumidor en el búfer del proveedor.The consumer uses IRowset::GetData to copy data from the buffer of the provider to the consumer buffer and IRowsetChange::SetData to copy data changes from the consumer buffer to the provider buffer.

El consumidor llama al método GetData y pasa el identificador a una fila, el identificador a un descriptor de acceso, y un puntero a un búfer asignado por el consumidor.The consumer calls the GetData method and passes the handle to a row, the handle to an accessor, and a pointer to a consumer-allocated buffer. GetData convierte los datos y devuelve las columnas como se especifica en los enlaces usados para crear el descriptor de acceso.GetData converts the data and returns the columns as specified in the bindings used to create the accessor. El consumidor puede llamar a GetData más de una vez para una fila, con descriptores de acceso y búferes distintos y, por tanto, el consumidor puede obtener varias copias de los mismos datos.The consumer can call GetData more than one time for a row, using different accessors and buffers and therefore the consumer can obtain multiple copies of the same data.

Los datos de las columnas de longitud variable se pueden tratar de varias maneras.Data from variable-length columns can be treated several ways. Primero, tales columnas se pueden enlazar a una sección finita de la estructura del consumidor.First, such columns can be bound to a finite section of the consumer's structure. Esto produce un truncamiento cuando la longitud de los datos supera la longitud del búfer.This causes truncation when the length of the data exceeds the length of the buffer. El consumidor puede determinar que se ha producido ese truncamiento comprobando el estado DBSTATUS_S_TRUNCATED.The consumer can determine that truncation has occurred by checking for the status DBSTATUS_S_TRUNCATED. La longitud devuelta siempre es la longitud verdadera en bytes, para que el consumidor pueda determinar también cuántos datos se han truncado.The returned length is always the true length in bytes, so that the consumer also can determine how much data was truncated.

Cuando el consumidor ha finalizado la captura o actualización de las filas, las libera con el método ReleaseRows.When the consumer has finished fetching or updating rows, it releases them with the ReleaseRows method. Esto libera los recursos de la copia de las filas del conjunto de filas y crea espacio para las nuevas filas.This releases resources from the copy of the rows in the rowset and makes room for new rows. A continuación, el consumidor puede repetir su ciclo de captura o creación de filas y obtener acceso a los datos de ellas.The consumer can then repeat its cycle of fetching or creating rows and accessing the data in them.

Cuando el consumidor ha finalizado con el conjunto de filas, llama al método IAccessor::ReleaseAccessor para liberar los descriptores de acceso.When the consumer is finished with the rowset, it calls the IAccessor::ReleaseAccessor method to release any accessor. Llama al método IUnknown::Release en todas las interfaces expuestas por el conjunto de filas para liberar el conjunto de filas.It calls the IUnknown::Release method on all interfaces exposed by the rowset to release the rowset. Cuando se libera el conjunto de filas, fuerza la liberación de las filas o descriptores de acceso restantes que el consumidor pueda contener.When the rowset is released, it forces the release of any remaining rows or accessors the consumer may hold.

En esta secciónIn This Section

Consulte tambiénSee Also

Conjuntos de filasRowsets