Foros del Web » Programación para mayores de 30 ;) » .NET »

Error código consulta

Estas en el tema de Error código consulta en el foro de .NET en Foros del Web. Utilizao SQlite y visual studio 05 .net Tengo la siguiente consulta: Código: Public Function todosLosContactosBasico() As System.Data.DataSet Implements InterfaceContactos.todosLosContactosBasico Dim ds As New DataSet Dim ...
  #1 (permalink)  
Antiguo 06/09/2009, 04:18
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Exclamación Error código consulta

Utilizao SQlite y visual studio 05 .net

Tengo la siguiente consulta:

Código:
    Public Function todosLosContactosBasico() As System.Data.DataSet Implements InterfaceContactos.todosLosContactosBasico
        Dim ds As New DataSet
        Dim mycommand As SQLiteCommand = New SQLiteCommand(conexion)
        mycommand.CommandText = "Select numeroDeContacto, nombre, apellido1, apellido2, movil, telefono, telefonoTrabajo, email, direccion, mapa, grupo, sexo from contactos order by 2,3,4"
        Dim reader As SQLiteDataReader = mycommand.ExecuteReader()
        ds.Load(reader, LoadOption.OverwriteChanges, "table")
        Return ds
    End Function
Al ejecutarlo me da error en:

Código:
Dim reader As SQLiteDataReader = mycommand.ExecuteReader()
El error es: No connection associated with this command

¿Cómo lo puedo arreglar?

Muchas gracias.
  #2 (permalink)  
Antiguo 06/09/2009, 08:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error código consulta

Creando la conexión.
Por lo que parece, estás creando un objeto SQLiteCommand basado en un objeto de la clase SqlLiteConnection conexion, pero ese objeto debe tener un valor Nothing en el momento de invocarlo, por cuanto lo que te dice es simple: "No existe ninguna conexión asociada a este comando".
Revisa la secuencia y asegurate que el objeto conexión sea un objeto válido y que la conexión esté abierta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/09/2009, 09:29
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Error código consulta

Gracias era eso

Por cierto una vez que devuelvo el dataset (tal y como aparece en mi función) como puedo ir mostrando registro a registro?
  #4 (permalink)  
Antiguo 06/09/2009, 09:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error código consulta

Recorrelo en un For/Nexto o bien con un For Each / Next, al modo de una matriz.
También la cosa aquí es qué es lo que vas a hacer con la tabla obtenida, porque si la idea es hacer ciertos cálculos sobre valores puros devueltos en la tabla, es posible que se pueda hacer la tarea en la BB.DD. y no en la aplicación. Peor si lo que quieres es mostrar la tabla... para eso es el uso de un DataGrid.
¿Qué es lo que quieres hacer, exactamente?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/09/2009, 10:32
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Error código consulta

La consulta me devuelve una serie de contactos, cada contacto esta formado por lo típico:

nombre, apellidos, telf, fecha nacimiento, email, ...

Lo que necesito es lo siguiente:


mientras datosObtenidosEnLaConsulta (while not nothing ds?)
dim coleccion as new Collection
dim persona as new Contacto
Esto es lo que no se hacer, acceder{
persona.setnombre = "primerNombreOtenidoEnLaConsulta"
persona.setapellido = "primerApellidoOtenidoEnLaConsulta
}Esto es lo que no se hacer, acceder
...
coleccion.añadir(persona)
fin mientras


Muchas gracias por tu ayuda.
  #6 (permalink)  
Antiguo 06/09/2009, 10:33
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Error código consulta

Es decir, necesito ir recorriendo los datos obtenidos e ir guardándolos en los atributos del objeto persona.

Última edición por jorgegetafe; 06/09/2009 a las 10:41
  #7 (permalink)  
Antiguo 06/09/2009, 15:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error código consulta

Pareciera por algunos detalles que estás más habituado a usar VB. 6.0 que .Net. Tal vez me equivoque.
La solución la puedes implementar de muchas formas, a través de diferentes objetos que sean capaces de construir colecciones, aunque no uses específicamente un objeto Collection.
Yo suelo usar ArrayList o HashTables, que crecen dinámicamente según lo que se le agregue, e incluso pueden contener objetos distintos en cada entrada.
También suelo usar arrays de objetos cuando la clase la creo yo mismo, como es tu caso.
En este caso podría ser:
Código vb.net:
Ver original
  1. Dim contactos as New ArrayList
  2. Dim persona as Contacto
  3. For Each r As DataRow In TablaDevuelta.Rows
  4.    persona = New Contacto
  5.     persona.setnombre = Convert.ToString(r.Item("nombre"))
  6.     persona.setapellido = Convert.ToString(r.Item("apellido1"))
  7.    contactos.Add(persona)
  8. Next

Al terminar de ejecutarse, la variable r, que se creó en el momento de iniciar el For Each..., desaparece, y el ArrayList contactos contiene una colección de objetos Contacto con sus nombres y apellidos cargados.

El uso de System.Convert.ToString() es obligatorio en VB.Net 2005 de acuerdo a las configuraciones del proyecto, por lo que hemos encontrado recientemente en algunas migraciones desde VB.Net 2003, por eso lo incluyo. Aún no estoy totalmente seguro de si es necesario, aunque sí lo es en el caso de valores sin signo, por ejemplo.

En un ArrayList, los objetos son accedidos por medio del método Item(subindice), por ejemplo, usándolo para cargar un textBox:

Código vb.net:
Ver original
  1. TextBox1.Text = contactos.Item(2).DarNombre

(suponiendo que DarPersona sea un método o propiedad que devuelva el nombre)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 07/09/2009, 01:18
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Error código consulta

Gracias por las molestias que te has tomado.

Una última duda y ya te dejo en paz xD, el método que tengo (escrito por completo anteriormente) me devuelve un dataset:


Código:
Public Function todosLosContactosBasico() As System.Data.DataSet Implements InterfaceContactos.todosLosContactosBasico

No me devuelve una tabla, y por lo tanto no se que poner aquí:

Código:
For Each r As DataRow In TablaDevuelta.Rows
Muchas gracias.
  #9 (permalink)  
Antiguo 07/09/2009, 05:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error código consulta

Si te devuelve un DataSet, te devuelve al menos una tabla, porque un DataSet es un contenedor de tablas (y si mal no recuerdo contiene sólo tablas, cualquier duda ver DataSet en MSDN).
Si ese método de devuelve un DataSet y no es usado por ninguna otro método, solamente contendrá la tabla leída, por lo que la propiedad DataSet.Tables.Count debería devolverte 1, y para acceder a ella, si no le has puesto nombre, simplemente sería todosLosContactosBasico.Tables(0)

El código quedaría:
Código vb.net:
Ver original
  1. Dim contactos as New ArrayList
  2. Dim persona as Contacto
  3. For Each r As DataRow In todosLosContactosBasico.Tables(0).Rows
  4.    persona = New Contacto
  5.     persona.setnombre = Convert.ToString(r.Item("nombre"))
  6.     persona.setapellido = Convert.ToString(r.Item("apellido1"))
  7.    contactos.Add(persona)
  8. Next
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 07/09/2009, 14:57
 
Fecha de Ingreso: febrero-2008
Ubicación: Madrid
Mensajes: 474
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Error código consulta

Perfecto, funciona 100% muchas gracias por todo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:38.