none
llenar un dataset con for RRS feed

  • Pregunta

  • Hola, que tal.

    Tengo una duda, espero que alguien me pueda auxiliar.

    Lo que quiero hacer es ir llenando un dataset conforme se va rrecorriendo un for.

    Al entrar el primer registro si llena el dataset, pero al pasar el siguiente el dataset sigue teniendo los mismos valores y se supone que deberia de tener mas.

    les muestro un ejemplo de lo que quiero hacer.

    for (int i=0 ; i <gridview1.rows.count ; i++)

    {

    string strCommand="select campo1, campo2 from tabla";
    OleDbCommand cmdConsultar = new OleDbCommand(strCommand, objConn);
    cmdConsultar.CommandType = CommandType.Text;

    DataSet dtsDatos=new DataSet();
    sqlConn.Open();
    objAdapter.Fill(dtsDatos);

    }

    por ejemplo si el select trae 5 registros el dataset se llenara con 5 registros cuando i=0

    cuando i=1 el dataset debe de tener 10 registros  y asi sucesivamente hasta que termine el for.

    Espero me puedan ayudar.. Muchas Gracias

    miércoles, 26 de septiembre de 2012 21:41

Todas las respuestas

  • mm en ese caso denerias usar un Merge() igual es raro lo que planteas como esperas que con i=0 y i=1 devuelva diferente cantidad de registros si la query

    select campo1, campo2 from tabla

    no varia nunca, asi como esta devuel siempre los mismo en cada iteracion


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de septiembre de 2012 22:32
  • Hola:

    No pones como llenas el dataset (.LlenaDataSet), pero 'en teoría' si usas el metodo .Fill(), los datos de la consulta se añaden a los datos existentes.

    Pero si lo llenas según tu primer mensaje/ejemplo, donde pones:

    DataSet dtsDatos=new DataSet();
    sqlConn.Open();
    objAdapter.Fill(dtsDatos);

    Como 'siempre' haces un New DataSet() antes del .Fill(), pues te crea un nuevo dataset 'vacio' y luego lo llena, y por eso pierdes los datos ya existentes/cargados, solo se mostrarán los datos del último paciente.

    Saludos

    jueves, 27 de septiembre de 2012 7:38
  • Hola Focus:

    Llenando el dataset con el metodo .fill el codigo quedaria asi:

    for (int i = 0; i < ucResultados._grEstadisticas.Rows.Count; i++)
    {
     string paciente = ucResultados._grEstadisticas.Rows[i].Cells[0].Text;
    string connectionString = "Data Source=VOLTA;Initial Catalog=gscrit;Persist Security Info=True;User ID=super;Password=super";
                        SqlConnection connection = new SqlConnection(connectionString);
                        connection.Open();
                        SqlCommand command = new SqlCommand("SELECT * FROM dbo.K_DETALLE_PACIENTE where paciente="+paciente", connection);
                        SqlDataAdapter adapter = new SqlDataAdapter(command);
                        DataSet dt = new DataSet();
                        adapter.Fill(dt);
    }

    entonces como lo explicaba en mi pregunta anterior, lo que quiero hacer es lo siguiente

    por ejemplo la grid dice que tiene 5 filas; entonces cuando i = 0 paciente=2525, por lo que el dataset se va a llenar con la consulta que traiga el paciente= 2525. Luego cuando i=1 paciente=3333, por lo que el dataset se llena con la consulta que traiga el paciente=3333; pero debe de conservar los valores anteriores y asi sucesivamente hasta que se termine de rrecorrer el for.

    Ojala me puedan ayudar, porque ya se me acabaron todas mis ideas :(

    jueves, 27 de septiembre de 2012 14:24
  • Hola:

    Como ya te he comentado, haces:

                        DataSet dt = new DataSet();

    Por lo que 'siempre creas desde cero' un nuevo DataSet, y pierdes todos los datos ya leidos, yo probaría lo siguiente (no me gusta trabajar con dataset, así que también te pongo como DataTable):

    DataTable dt = new DataTable(); // Versión Tabla

    DataSet ds = new DataSet();  // Versión DataSet

    for (int i = 0; i < ucResultados._grEstadisticas.Rows.Count; i++)
    {
     string paciente = ucResultados._grEstadisticas.Rows[i].Cells[0].Text;
    string connectionString = "Data Source=VOLTA;Initial Catalog=gscrit;Persist Security Info=True;User ID=super;Password=super";
                        SqlConnection connection = new SqlConnection(connectionString);
                        connection.Open();
                        SqlCommand command = new SqlCommand("SELECT * FROM dbo.K_DETALLE_PACIENTE where paciente="+paciente", connection);
                        SqlDataAdapter adapter = new SqlDataAdapter(command);

                        // Esto sobra: DataSet dt = new DataSet();                   

                        adapter.Fill(dt); // Versión tabla

                        adapter.Fill(ds,"AquiTienesQuePonerUnNombre"); // Versión DataSet
    }

    Saludos

    • Propuesto como respuesta Focus Media viernes, 28 de septiembre de 2012 7:22
    jueves, 27 de septiembre de 2012 16:48
  • Muchisimas Gracias. por fin lo pude arreglar
    jueves, 27 de septiembre de 2012 21:30