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.
Microsoft Los cursores de SQL Server 2005 Compact Edition (SQL Server Compact Edition) son similares a los utilizados en SQL Server. En esta sección se describen las diferencias entre ellos. Para obtener una explicación completa de los cursores de base de datos, vea los Libros en pantalla de SQL Server.
SQL Server Compact Edition admite los siguientes tipos de cursores:
- Tabla base
- Estáticos
- Sólo avance
- Sólo avance o sólo lectura
- Dirigidos por conjuntos de claves
Cursores de tabla base
Los cursores de tabla base constituyen el nivel inferior de cursor disponible. Estos cursores funcionan directamente con el motor de almacenamiento y son los más rápidos de todos los admitidos. Los cursores de tabla base pueden desplazarse hacia adelante o hacia atrás con un costo mínimo, y se pueden actualizar.
También se puede abrir un cursor directamente en un índice. Los índices se admiten para ordenar las filas de una tabla, permitir las búsquedas de valores específicos y restringir las filas en función de un intervalo de valores dentro de un índice.
Los cursores de tabla base tienen pertenencia dinámica. En este tipo de pertenencia, dos cursores abiertos sobre la misma tabla pueden de forma inmediata ver inserciones, eliminaciones y modificaciones de los datos, en el supuesto de que ambos se encuentren en el mismo ámbito de transacción. Puesto que es posible actualizar los cursores de tabla base, un cliente puede utilizarlos para realizar cambios en los datos subyacentes.
Los cursores de tabla base no pueden representar el resultado de una consulta. Mediante un cursor de tabla base no se devuelven resultados de consultas, como SELECT * FROM tablename. En su lugar, se utiliza uno de los cursores de resultado de consulta admitidos.
A continuación, se ofrece un ejemplo de cómo obtener un cursor de tabla base mediante ADO .NET:
//Base Table Cursor
cmd.CommandText = "tablename";
cmd.CommandType = CommandType.TableDirect;
SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
A continuación, se ofrece un ejemplo de cómo obtener un cursor de índice mediante ADO .NET:
cmd.CommandText = "tablename";
cmd.IndexName = "indexname";
cmd.CommandType = CommandType.TableDirect;
SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
Cursores estáticos
Un cursor estático, denominado cursor de consulta desplazable en versiones anteriores de SQL Server Compact Edition, crea y almacena una copia completa del conjunto de resultados. La excepción a esto son los datos de valor largo que se recuperan cuando un usuario los solicita expresamente. Este conjunto de resultados sólo se llena cuando es necesario. En SQL Server es diferente, ya que el conjunto de resultados se llena en el momento de crear el cursor. Los cursores estáticos admiten el desplazamiento hacia atrás y hacia adelante, pero no las actualizaciones. Los cursores estáticos no ven los cambios externos en los datos inapropiados. Los resultados de la consulta se almacenan en caché durante toda la vida del cursor. Aunque los cursores estáticos son más funcionales que los cursores de sólo avance, también son más lentos y utilizan más memoria. Se recomienda tener en cuenta los cursores estáticos únicamente si el desplazamiento es necesario y un cursor de conjunto de claves no es adecuado.
A continuación se incluye un ejemplo de cómo obtener un cursor estático utilizando ADO.NET:
cmd.CommandText = "Select * from tablename";
SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Insensitive);
Cursores de sólo avance
El cursor de sólo avance es el más rápido que se puede actualizar, pero no admite el desplazamiento. Sólo admite la recuperación de filas en serie desde el principio hasta el final del cursor. Las filas no se obtienen en la base de datos hasta que se recuperan. Los efectos de todas las instrucciones INSERT, UPDATE y DELETE realizadas por el usuario actual o confirmadas por otros usuarios que afecten a las filas del conjunto de resultados se pueden ver cuando se recuperan las filas en el cursor. Como el cursor no se puede desplazar hacia atrás, los cambios realizados en las filas de la base de datos tras recuperar la fila no se pueden ver utilizando el cursor.
Los cursores de sólo avance y de sólo avance o sólo lectura son los cursores más rápidos basados en consultas. Deben utilizarse en aquellos casos en que lo más importante sea la velocidad y la memoria.
A continuación, se ofrece un ejemplo de cómo obtener un cursor de sólo avance mediante ADO .NET:
cmd.CommandText = "Select * from tablename";
SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Updatable);
Cursores de sólo avance y sólo lectura
Los cursores de sólo avance o sólo lectura, denominados cursores de sólo avance en versiones anteriores de SQL Server Compact Edition, son los cursores más rápidos, pero no se pueden actualizar.
A continuación se incluye un ejemplo de cómo obtener un cursor de sólo avance o sólo lectura utilizando ADO.NET:
cmd.CommandText = "Select * from tablename";
SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.None);
Nota No se pueden crear cursores de sólo lectura en consultas que devuelven únicamente columnas de sólo lectura, ya que internamente todos los cursores de SQL Server Compact Edition se pueden actualizar. SQL Server Compact Edition no puede actualizar las columnas de sólo lectura devueltas en SqlCeResultSet. Por lo tanto, se produciría el error "No se puede generar un cursor actualizable para la consulta porque no hay una columna actualizable".
Cursores dirigidos por conjuntos de claves
El cursor controlado por conjuntos de claves de SQL Server Compact Edition es un cursor desplazable que se puede actualizar. Este tipo de cursor está controlado por un conjunto de identificadores físicos conocidos como conjunto de claves. El conjunto de claves se basa en todas las filas válidas para la instrucción SELECT en el momento de apertura del cursor. El conjunto de claves se crea en una tabla temporal al abrir el cursor. En un cursor dirigido por conjuntos de claves, la pertenencia se determina en el momento de ejecutar la consulta.
Los cursores controlados por conjuntos de claves de SQL Server Compact Edition son ligeramente diferentes de los de SQL Server. En SQL Server, el cursor controlado por conjuntos de claves utiliza un conjunto de identificadores únicos como claves del conjunto de claves. En SQL Server Compact Edition, las claves son marcadores de la ubicación de almacenamiento lógico de los valores en una tabla. No son identificadores únicos.
Aunque el cursor dirigido por conjuntos de claves es sensible a diferentes cambios, no lo es tanto como otros cursores. Por ejemplo, una inserción fuera del cursor no se verá, pero las inserciones dentro del cursor se verán al final. En este caso, se recomienda que cierre y vuelva a abrir el cursor, o utilice uno de los cursores de sólo avance.
Puesto que SQL Server Compact Edition utiliza marcadores para definir un conjunto de claves, todos los cambios en los valores de datos para las filas incluidas en el conjunto de claves se pueden ver utilizando el cursor. Esto es aplicable a los cambios realizados tanto dentro como fuera del cursor.
Las eliminaciones en un cursor de conjuntos de claves, ya sea dentro o fuera del cursor, causarán que se indique que la fila se ha eliminado si se intenta recuperarla.
A continuación, se ofrece un ejemplo de cómo obtener un cursor dirigido por conjuntos de claves mediante ADO .NET:
cmd.CommandText = "Select * from tablename";
SqlCeResultSet rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);
Trabajar con combinaciones
Si la consulta que se utiliza para abrir un cursor dirigido por conjuntos de claves incluye columnas combinadas, éstas no se pueden actualizar. El usuario puede insertar nuevos valores en ellas, pero no se admiten actualizaciones.
Si se utiliza el conjunto de claves para llenar un control actualizable por el usuario, como un objeto DataGrid, los usuarios pueden intentar actualizar los valores del control y la actualización producirá un error. Si está desarrollando una aplicación en la que se utiliza DataGrid para mostrar datos de columnas combinadas, asegúrese de configurar las columnas combinadas de DataGrid en sólo lectura.
Vea también
Conceptos
Cursores (SQL Server Compact Edition)
Elegir un tipo de cursor
Cursores y bloqueo
Conversiones de cursor implícitas
Actualizar cursores dirigidos por conjuntos de claves