none
Datos de un dataset reemplazan a otro dataset RRS feed

  • Pregunta

  • Buenos dias, tengo un problema: estoy trabajando con 2 dataset distintos, uno llamado "preguntas" y otro llamado "respuestas", ambos los cargo en la funcion load de mi windows form, sin embargo al llamar una funcion para guardar datos en el dataset "respuestas" noto que los datos que tengo en el dataset "preguntas" se han cargado en el dataset "respuestas" y ya revise y en ningun momento uso la funcion para cargar las preguntas en el dataset de las respuestas.

    la forma de mi programa es mas o menos la siguiente:



    dim preguntas as new dataset
    dim respuestas as new dataset

    private sub pantalla_principal(Byval sender as object, Byval e as systen event args) handles myBase.load

    preguntas = funcion_para cargar_preguntas_deuna_base_de_datos()
    respuestas= funcion_para cargar_respuestas_deuna_base_de_datos()

    end sub

    Private sub guardar_respuestas(Byval r as integer )

    respuestas = r

    end sub


    Mi preguntas es: ¿Porque se reemplazan los datos de un dataset en el otro?
    • Cambiado Enrique M. Montejo sábado, 2 de julio de 2011 9:46 acceso a datos (De:Lenguaje VB.NET)
    miércoles, 20 de enero de 2010 19:03

Todas las respuestas

  • Hola puede ser porque sin darte cuenta estés asignado un dataset al otro, o que las funciones
    funcion_para cargar_preguntas_deuna_base_de_datos()
    funcion_para cargar_respuestas_deuna_base_de_datos()
    cargen los mismos datos pr algun error de esos de copiar/pegar/modificar?

    Si te vale marca la respuesta como válida. Saludos
    miércoles, 20 de enero de 2010 20:01
  • Ya revise el codigo y el dataset "preguntas" solo carga datos de "funcion_para cargar_preguntas_deuna_base_de_datos()", asi como "respuestas" solo carga datos de  "funcion_para cargar_respuestas_deuna_base_de_datos()", en ningun momento se cruzan.

    El problema es que al ejecutar la ultima funcion, sea cual sea la funcion( sea "funcion_para cargar_preguntas_deuna_base_de_datos()" o sea
    "funcion_para cargar_respuestas_deuna_base_de_datos()") , los datos de ambos dataset se modifican y no se porque
    miércoles, 20 de enero de 2010 20:06
  • puedes poner el codigo, de como los llenas?

    miércoles, 20 de enero de 2010 20:25
  • Primero lo que te pide Arthemiaz, y 2do, porque en vez de usar 2 Datasets no usas uno?
    Recordá que un Dataset puede tener una estructura relacional adentro.
    Lo que podrías hacer es crear un DataSet y agregar las tablas preguntas y respuestas al mismo y luego referencias a cada una de estas tablas.

    Dim myAdapter as SqlDataAdapter = new SqlDataAdapter(
    “SELECT * FROM Customers; SELECT * FROM Orders“, connection)
    
    myAdapter.Fill(dsTables)
    dsTables.Tables(0).TableName = “Customers“)
    dsTables.Tables(1).TableName = “Orders“)
    Con este codigo de más arriba podes llenar tus 2 tablas dentro del dataset y para acceder a cada tabla los haces con :

    dsTables.Tables("Customers") o bien dsTables.TAbles(0)
    dsTables.Tables("Orders") o bien dsTables.TAbles(1)

    Saludos,
    Sandro D. Garcia
    Colabora con el foro: Si este mensaje te es de utilidad marcalo como respuesta. ----- Please, if this message helps you, remember mark it as response, may be can help more people with same problem.
    miércoles, 20 de enero de 2010 21:56
  • Public Function Cargar_preguntas_deuna_base_de_datos() As DataSet

    Dim preguntas As New DataSet

    Try

      preguntas = ConsultaPreg()

    Catch e As Exception

    System.Console.WriteLine(e.Message)

    Exit Function

    End Try

       If preguntas.Tables(0).Rows.Count = 0 Then

       MsgBox("NO HAY PREGUNTAS")

       End If

    Return preguntas

    End Function



    public DataSet ConsultaPreg()
            {
                try
                {
                    this.sqlconexion.Open();
                    this.sqlcomand = new SqlCommand("preguntas", sqlConexion);
                    sqlcomand.CommandType = CommandType.StoredProcedure;
                    this.sqlDataadapter = new SqlDataAdapter(sqlcommand);
                    this.tabla.Clear();
                    sqlDataadapter.Fill(this.tabla);
                }
                catch (Exception ex)
                {
                    throw;
                }
                finally
                {
                    this.sqlCnn.Close();
                }
                return this.tabla;
            }

     

    el stored procedure es

    select preguntas, numero de preguntas
    from tabla_preguntas

    para la funcion de cargar respuestas es algo similar, solo cambia la tabla del stored procedure, pero como ya dije no es problema de copy paste porque ya revise el codigo varias veces

     

    miércoles, 20 de enero de 2010 21:57
  • hola

    primero hay algo baatante extraño el metodo CargarTest() lo ahs codigocado en vb.net
    pero el metodo ConsultaPreg() esta en c#

    como se entiende esto?

    tienes proyecto en distintos lenguajes, la verdad es algo raro


    despues segun veo hay una liena que me deja la duda
    cuando haces
    this.tabla.Clear();

    este table de dodne viene, o dodne esta declarado?
    no deberia estar dentro de la misam funcion y devolverse, recuerda que los objetos son por referencia con un puntero
    si lo vas modificando modificas a todos globalmente

    no deberia ser algo como esto


    public DataSet ConsultaPreg()
    {
        try
        {
            using(SqlConnection sqlconexion = new SqlConnection("connection string"))
            {
                sqlconexion .Open();

                SqlCommand sqlcomand = new SqlCommand("preguntas", sqlconexion);
                sqlcomand.CommandType = CommandType.StoredProcedure;
           
               SqlDataAdapter sqlDataadapter = new SqlDataAdapter(sqlCmd);
           
                DataSet tabla = new DataSet();
                sqlDataadapter.Fill(tabla);
            }
           
        }
        catch (Exception ex)
        {
            throw;
        }

        return tabla;
    }

    ademas despues devolvias un catalogo este de dodne salio?
    o sea lo metodos fueron creados para trabajar de forma encapsulada no para que accedan objetos globales

    si usas el using no necesitas luego cerrar a conexion ya que este lo hace solo

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 20 de enero de 2010 22:33
  • La funcion ConsultaPreg() esta en otra hoja de codigo, y efectivamente la he programado en c sharp, la mando llamar con la linea ConsultaPreg(),  y si, se me olvido poner la declaracion de la tabla, es justo como dices; lo del catalogo tambien lo corregi, hice mal el copy paste desde mi programa, en vez de catalogo es "return tabla", en mi codigo si esta como "return tabla "
    miércoles, 20 de enero de 2010 22:44
  • holas


    bien pero ese table de donde sale?
    dond esta declarado, la idea de los metodo es como te comentaba encapsular ese table deberia crearse y declararse en el mismo metodo no por fuera
    ya que si lo ahces asi todos apuntan a mismo objeto, ten en cuanta que cuando lo devuelves no devuelves una copia es una referencia, por lo que si la modificas tambien lo haces el las otras variables que tuvieron el puntero a este

    declara objetos table nuevo por cada oepracion dentro de cada metodo y seguro se soluciona el problema
    haslo lo mas parecido al ejemplo que te proporcione

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 20 de enero de 2010 22:49
  • Dataset tabla esta declarada globalmente, la funcion que puse es para cargar preguntas, tengo otra funcion que se usa para cargar respuestas, que es casi identica a la que puse, y ambas funciones en c sharp usan el dataset "tabla", voy a declarar otro dataset para la funcion de cargar respuestas y deja lo pruebo para ver si era eso.
    miércoles, 20 de enero de 2010 23:02
  • Al parecer se trataba de eso, tenia que definir un dataset para cada funcion, seguire haciendo pruebas para cerciorarme, gracias a todos por sus aportaciones.

    jueves, 21 de enero de 2010 1:39