Pregunta

He desarrollado tanto en VB6 como en VB.NET, y he usado objetos ADODB en VB6 para manejar la navegación del conjunto de registros (es decir, los métodos MoveFirst, MoveNext, etc.), y he usado ADO.NET para manejar consultas en una fila por fila (es decir, para cada fila en la tabla. Filas ...)

Pero ahora parece que he llegado a un dilema. Ahora estoy creando un programa en VB.NET donde necesito usar la funcionalidad equivalente de los comandos Move del antiguo objeto Recordset. ¿VB.NET tiene algún tipo de objeto que admita esta funcionalidad, o tengo que recurrir al uso del antiguo objeto COM ADODB?

Editar: solo para aclarar, quiero que el usuario pueda navegar a través de la consulta hacia adelante o hacia atrás. Recorrer las filas es una tarea simple.

¿Fue útil?

Solución

No hay necesidad de volver a los viejos tiempos. Si puede dar un ejemplo de pseudocódigo, puedo traducirlo a vb.net por usted.

Esta es una forma genérica de hacerlo.

Dim ds as DataSet

'populate your DataSet'

For each dr as DataRow in ds.Tables(<tableIndex>).Rows
  'Do something with the row'

Next

Por edición 1: el usuario navegará por los resultados, no por la consulta. Entonces, lo que desea hacer es: a) obtener los resultados y mostrar solo el índice de rowin actual de ds.Tables.Row (), o b) ejecutar una nueva consulta con cada navegación (no es una opción que realmente funcione bien)

Por comentario: No, no lo han hecho. Pero el usuario generalmente no trabajará interactivamente con la base de datos como esta. Necesitará obtener su conjunto de datos / tabla de resultados y usar los botones para recuperar la fila relevante del conjunto de datos / tabla.

  • La primera fila es DataTable.Rows (0)
  • La última fila es DataTable.Rows (DataTable.Rows.Count-1)
    • para cualquier fila intermedia (almacene el rowindex que se muestra actualmente en su aplicación), luego llame
  • DataTable.Rows (currentRowIndex -1) para anteriores y
  • DataTable.Rows (currentRowIndex +1) para el siguiente.

Otros consejos

Todo depende del uso: Si solo necesita enumerar los resultados de una o más consultas, debe usar el lector de datos. Ha señalado DOK, es de solo lectura y solo hacia adelante, por lo que es rápido. http://www.startvbdotnet.com/ado/sqlserver.aspx

Si necesita navegar por los registros, debe usar un conjunto de datos. http://www.c-sharpcorner.com/ UploadFile / raghavnayak / DataSetsIn.NET12032005003647AM / DataSetsIn.NET.aspx

El conjunto de datos también tiene la ventaja de funcionar "desconectado", por lo que construye toda la lógica, y solo cuando necesita los datos llama al método Fill. El conjunto de datos se completa y luego puede comenzar a trabajar con los datos, ahora desconectado de la base de datos.

Espero que ayude, Bruno Figueiredo http://www.brunofigueiredo.com

Aquí hay un ejemplo rápido del uso del lector de datos:

            Dim cmd As New OleDb.OleDbCommand(sql, Conn) 'You can also use command parameter here
            Dim dr As OleDb.OleDbDataReader
            dr = cmd.ExecuteReader

            While dr.Read

          ‘Do something with data
          ‘ access fields
          dr("fieldname")
          ‘Check for null
          IsDBNull(dr("fieldname"))

            End While

            dr.Close()

En .Net, hay muchas formas de hacer esto. Uno que me gusta es usar un DataReader, que puede devolver múltiples conjuntos de registros. Puede recorrer sus registros usando While DataReader.Read.

Una de las ventajas de usar DataReader es que es un objeto de solo lectura, solo avance, por lo que es rápido y liviano.

Para permitir al usuario navegar por todos los registros, uno a la vez, no desea mantener abierto un DataReader mientras el usuario navega. Puede leer los registros de DataReader en objetos. O bien, puede recuperar los registros en un conjunto de datos y mostrar las filas de datos de la tabla de datos de una en una.

Sugeriría que, si es posible, recupere todos los registros a la vez si no hay demasiados. Esto guardará llamadas repetidas a la base de datos.

Por otro lado, si hay muchos registros, puede recuperar los primeros (digamos, 10 o 20) y solo recuperar el siguiente conjunto de registros con una nueva llamada a la base de datos si el usuario hace clic más allá del conjunto inicial . Esta es una carga lenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top