none
Ayuda en visual basic 2008 con Xml y Rmd sql RRS feed

  • Pregunta

  • Muy buenas noches tengo una consulta como muestro un dato aleotariamente de una base de datos a continuacion muestro mi base de datos

    BD

    create table cuestionario(

        Pregunta nvarchar (100),
        Respuesta nvarchar (100),
        Respuesta1 nvarchar (100),
        Respuesta2 nvarchar (100),
    );
    select * from cuestionario;
    insert into cuestionario values('Gaban','Overcoat','10 Hectares','Young wild boar');
    insert into cuestionario values('Gafas','Spectacles','A bad-tempered person.','Overcoat');
    insert into cuestionario values ('Gaban','Overcoat','Here','Daparture');

    ________________________________________________________________________________________________

    FUNCION DE LA BASE DE DATOS

     Public Function ejecutar(ByVal sentencia As String, ByVal leer As Boolean) As Boolean
            comando.CommandText = sentencia
            comando.CommandType = CommandType.Text
            consulta = comando.ExecuteReader

            Console.WriteLine("Sentencia ejecutada: " + sentencia)
            If leer Then
                Dim valores As New ArrayList()
               
                While consulta.Read()
                    frmprueba.lblpregunta.Text = consulta("pregunta").ToString
                    frmprueba.lblrespuesta.Text = consulta("Respuesta").ToString
                    frmprueba.lblrespuesta1.Text = consulta("Respuesta1").ToString
                    frmprueba.lblrespuesta2.Text = consulta("Respuesta2").ToString
                   
                End While

                consulta.Close()
            End If
            Return True
        End Function
    ___________________________________________________________________________________________

    PARA CONECTARSE A LA BD Y MOSTRAR PREGUNTAS

    Private Sub btnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsiguiente.Click
            'Dim numAlumnos As Boolean
            c.conectar()
            'MessageBox.Show("Conectado")
            c.ejecutar("SELECT cuestionario.* FROM cuestionario", True)
            c.desconectar()
        End Sub

     

    MIL GRACIAS

    • Cambiado Enrique M. Montejo martes, 6 de septiembre de 2011 17:17 acceso a datos (De:Lenguaje VB.NET)
    lunes, 7 de junio de 2010 0:41

Todas las respuestas

  • hola

    algunos comentarios

    si solo estas cargando un item en tus labels no necesitas usar el While consulta.Read() ya que este dejara simpre el ultimo

    si cargas controles simples con usar el

    If consulta.Read() Then

       frmprueba.lblpregunta.Text = consulta("pregunta").ToString
       frmprueba.lblrespuesta.Text = consulta("Respuesta").ToString
       frmprueba.lblrespuesta1.Text = consulta("Respuesta1").ToString
       frmprueba.lblrespuesta2.Text = consulta("Respuesta2").ToString
                   
    End If

    alcanza

     

    ahora bien por el tema del alteatorio podrias hacelo, pero son necesario algunos pasos previos, como por ejemplo determinar la catidad de info que tienes, o sea la cantidad de cuestionarios que hay en la tabla

    esto podrias hacerlo si haces

    Public Function CantCuestionarios() As Integer
        Dim valor As Integer

        Using cnn As New SqlConnection("connection string")

            Dim query As String = "SELECT COUNT(*) FROM cuestionario"
            Dim cmd As SqlCommand = New SqlCommand(query, cnn)
           
            valor = Cint(cmd.ExecuteScalar())

        End Using
       
        Return valor
    End

    luego podrias hacer que la funcion random tome un valor entre 1 y este valor
    pero para esto vas a tener que modificar la tablas agregandole un Id que indentifique cada pregunta
    sino no podras tomar una en concreto, es mas te falta definir una columna como clave primaria de la tabla, es mas podrias ponerla como del tipo identity, o sea autonumerica

    create table cuestionario(
        Id INT IDENTITY(1,1) PRIMARY KEY,
        Pregunta nvarchar (100),
        Respuesta nvarchar (100),
        Respuesta1 nvarchar (100),
        Respuesta2 nvarchar (100),
    );

    Private Sub btnMostrarPregunta(...)

        Dim cant As Integer = CantCuestionarios()

        Dim rand As New Random()
        Dim valorRand As Integer = rand.Nwxt(1, cant)

        MostrarCustionario(valorRand)

    End Sub

    Public Sub MostrarCustionario(ByVal id As Integer)

        Using cnn As New SqlConnection("connection string")

            Dim query As String = "SELECT * FROM cuestionario WHERE Id = @id"
           
            Dim cmd As SqlCommand = New SqlCommand(query, cnn)
            cmd.Parameters.AddWithValue("@id", id)
           
            Dim reader As SqlDataReader = cmd.ExecuteReader()
           
            If reader.Read() Then
           
                frmprueba.lblpregunta.Text = CStr(consulta("pregunta"))
                frmprueba.lblrespuesta.Text = CStr(consulta("Respuesta"))
                frmprueba.lblrespuesta1.Text = CStr(consulta("Respuesta1"))
                frmprueba.lblrespuesta2.Text = CStr(consulta("Respuesta2"))
               
            End If

        End Using
       
    End Function

    bueno creo que quedo bien completo, como veras al conexiones y los commadn que ejecuto estan definidos  en cada metodo esto es una buena tecnica, no necesitas ponerlos globalmente ya qe el propio ado.net se encarga de reutilizar las conexiones, por eso una un pool de conexiones

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 7 de junio de 2010 1:01
  • mil gracias ya lo arregle pero al correrlo sale

     Using cnn As New SqlConnection("connection string") es esta linea

    El formato de la cadena de inicialización no se ajusta a la especificación que comienza en el índice 0.

     

    Mil gracias

    • Marcado como respuesta Cuervinchi lunes, 7 de junio de 2010 3:44
    • Desmarcado como respuesta Cuervinchi lunes, 7 de junio de 2010 4:35
    lunes, 7 de junio de 2010 3:37
  • hola

    pero has marcado una respuesta como correcta, cuando aun estas planteando otro duda, seria bueno ademas marcar las respuestas que te ayudaron (recuerda que puede marcar mas de una), si cieras la preguntas sera dificil que alguien mas revise tu pregunta

     

    bien con respecto al error te comento que esto es un, por lo tanto alli debias poner la cadena de conexion a tu base de datos

    la que me imagino estas usando en  c.conectar() para conectarte a la db

    lo que no has especificado que base de datos usas si es sql server, Access, etc

    Connection strings for SQL Server 2005

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 7 de junio de 2010 4:11
  • buenas noches

     

    si es sql server 2005

    pero me conecto de varias maneraspero me vota errores en Dim reader As SqlDataReader = cmd.ExecuteReader() El nombre de objeto 'cuestionario' no es válido. y asi cosas  pues voy a mirar el link q me envio haver si puedo

    ___________________________________________________________________________________

    CONEXION

    Imports System.Data.SqlClient
    Public Class Conexion
       
        Public sqlc As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Andres\Documents\Visual Studio 2008\Projects\pruebaConexionSQL\pruebaConexionSQL\juego.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
       
        Public comando As New SqlClient.SqlCommand
        Public consulta As SqlClient.SqlDataReader

        Public Sub conectar()
            Dim sql As String = sqlc
            Dim conn As New SqlClient.SqlConnection(sql)
            conn.Open()
            comando.Connection = conn
        End Sub

        Public Sub desconectar()
            Dim sql As String = sqlc
            Dim conn As New SqlClient.SqlConnection(sql)
            conn.Dispose()
        End Sub

        Public Function ejecutar(ByVal sentencia As String, ByVal leer As Boolean) As Boolean
            comando.CommandText = sentencia
            comando.CommandType = CommandType.Text
            consulta = comando.ExecuteReader
            Console.WriteLine("Sentencia ejecutada: " + sentencia)
            If leer Then
                Dim valores As New ArrayList()

                consulta.Close()
            End If
            Return True
        End Function

    End Class
    _____________________________________________________________________________

    FORMURARIO

     

    Imports System.Data.SqlClient
    Imports System
    Imports System.Data

    Public Class frmprueba
        Public conexionBD As New Conexion()
        Dim c As Conexion = New Conexion
        Public consulta As SqlClient.SqlDataReader
        Public comando As New SqlClient.SqlCommand
        Private Sub btnMostrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsiguiente.Click
            c.conectar()
            c.ejecutar("SELECT cuestionario.* FROM cuestionario", True)
            Dim rand As New Random()
            Dim valorRand As Integer = rand.Next(1, 10)
            MostrarCustionario(valorRand)
            c.desconectar()
        End Sub


        Public Sub MostrarCustionario(ByVal id As Integer)
            Dim query As String = "SELECT * FROM cuestionario WHERE Id = @id"
            'Dim cmd As SqlCommand = New SqlCommand(query, conn)
            c.conectar()
            cmd .Parameters.AddWithValue("@id", id)
            Dim reader As SqlDataReader = cmd. ExecuteReader()
            If reader.Read() Then
                lblpregunta.Text = CStr(consulta("pregunta"))
                lblrespuesta.Text = CStr(consulta("Respuesta"))
                lblrespuesta1.Text = CStr(consulta("Respuesta1"))
                lblrespuesta2.Text = CStr(consulta("Respuesta2"))
            End If
            'End Using
        End Sub
        '   Public Function CantCuestionarios() As Integer
        '   Dim valor As Integer
        '      Using cnn As New SqlConnection("connection string")
        ' Dim query As String = "SELECT COUNT(*) FROM cuestionario"
        'Dim cmd As SqlCommand = New SqlCommand(query, cnn)
        '       valor = CInt(cmd.ExecuteScalar())
        '  End Using
        ' Return valor
        'End Function
    End Class

    CMD ESE PARTE Q ES LO Q HACE

     

    Mil gracias

    lunes, 7 de junio de 2010 4:34
  • hola

    si esta pasando el conn.Open(), quiere decir que a la db se puede conectar, eso ya es un paso

    por el mensaje que ves, pareceria que no esta encontrando el nombre la tabla "cuestionario"

    imagino has verificado que el nombre sea correcto

     

    tambine puede ver que la linea

      'Dim cmd As SqlCommand = New SqlCommand(query, conn)

    esta comentada

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 7 de junio de 2010 12:04
  • ¡Hola!

    ¿Fue posible solucionar su problema?

    Saludos
    Rafael Fagundes - Marque la respuesta como correcta si te ha sido de utilidad!
    lunes, 14 de junio de 2010 13:07