Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La interfaz IRowset es la interfaz del conjunto de filas base. La interfaz IRowset proporciona métodos para capturar filas secuencialmente, obtener los datos de esas filas y administrar filas. Los consumidores usan los métodos de IRowset para todas las operaciones básicas del conjunto de filas. Esto incluye la captura y liberación de filas y la obtención de valores de columna.
Cuando un consumidor obtiene un puntero de interfaz en un conjunto de filas, el primer paso suele ser determinar las funcionalidades del conjunto de filas mediante el método IRowsetInfo::GetProperties . Esto devuelve información sobre las interfaces expuestas por el conjunto de filas y también funcionalidades del conjunto de filas que no se muestran 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.
El siguiente paso para los consumidores es determinar las características o metadatos de las columnas del conjunto de filas. Para ello, usan el método IColumnsInfo para obtener información de columna simple o el método IColumnsRowset para obtener información de columna extendida. El método GetColumnInfo devuelve la siguiente información:
Número de columnas del conjunto de resultados.
Matriz de estructuras DBCOLUMNINFO, una por columna.
El orden de las estructuras es el orden en el que aparecen las columnas en el conjunto de filas. Cada estructura DBCOLUMNINFO incluye metadatos de columna, como el nombre de columna, ordinal de la columna, la longitud máxima posible de un valor en la columna, el tipo de datos de la columna, la precisión y la longitud.
Puntero a un almacenamiento para todos los valores de cadena dentro de un único bloque de asignación.
El consumidor determina qué columnas necesita de los metadatos o en función del comando de texto que generó el conjunto de filas. Determina los ordinales de las columnas necesarias de la ordenación de la información de columna devuelta por IColumnsInfo o desde los ordinales del conjunto de filas de metadatos de columna devuelto por IColumnsRowset.
Las interfaces IColumnsInfo e IColumnsRowset se usan para extraer información sobre las columnas del conjunto de filas. La interfaz IColumnsInfo devuelve un conjunto limitado de información, mientras que IColumnsRowset proporciona todos los metadatos.
Nota:
En la versión 7.0 y anteriores de SQL Server, 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.
Los ordinales se usan para especificar un enlace a una columna. Un enlace es una estructura que asocia un elemento de la estructura del consumidor a una columna. El enlace puede enlazar el valor de datos, la longitud y el valor de estado de la columna.
Un conjunto de enlaces se recopila en un descriptor de acceso. Esto se crea mediante el método IAccessor::CreateAccessor . Un descriptor de acceso puede contener varios enlaces para que los datos de varias columnas se puedan recuperar o establecer en una sola llamada. El consumidor puede crear varios descriptores de acceso para que coincidan con diferentes patrones de uso en diferentes partes de la aplicación. Puede crear y liberar descriptores de acceso mientras el conjunto de filas permanece en existencia.
Para capturar filas de la base de datos, el consumidor llama a un método, como IRowset::GetNextRows o IRowsetLocate::GetRowsAt. Estas operaciones de captura colocan los datos de fila del servidor en el búfer de filas del proveedor. El consumidor no tiene acceso directo al búfer de filas del proveedor. El consumidor usa IRowset::GetData para copiar datos del búfer del proveedor al búfer del consumidor e IRowsetChange::SetData para copiar los cambios de datos del búfer del consumidor en el búfer del proveedor.
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. GetData convierte los datos y devuelve las columnas especificadas en los enlaces usados para crear el descriptor de acceso. El consumidor puede llamar a GetData más de una vez para una fila, mediante distintos descriptores de acceso y búferes y, por lo tanto, el consumidor puede obtener varias copias de los mismos datos.
Los datos de columnas de longitud variable se pueden tratar de varias maneras. En primer lugar, estas columnas se pueden enlazar a una sección finita de la estructura del consumidor. Esto provoca el truncamiento cuando la longitud de los datos supera la longitud del búfer. El consumidor puede determinar que se ha producido el truncamiento comprobando el estado DBSTATUS_S_TRUNCATED. La longitud devuelta siempre es la longitud verdadera en bytes, por lo que el consumidor también puede determinar la cantidad de datos truncados.
Cuando el consumidor haya terminado de capturar o actualizar filas, las libera con el método ReleaseRows . Esto libera los recursos de la copia de las filas del conjunto de filas y hace espacio para las nuevas filas. A continuación, el consumidor puede repetir su ciclo de captura o creación de filas y acceso a los datos en ellos.
Cuando el consumidor termina con el conjunto de filas, llama al método IAccessor::ReleaseAccessor para liberar cualquier descriptor de acceso. Llama al método IUnknown::Release en todas las interfaces expuestas por el conjunto de filas para liberar el conjunto de filas. Cuando se libera el conjunto de filas, fuerza la liberación de las filas o descriptores de acceso restantes que pueda contener el consumidor.