• User

    aggiornare dati un DataSet

    private void ricercaFigli(int idSponsor , DataSet ds){
    SqlConnection mySqlConnection =new SqlConnection(ConfigurationSettings.AppSettings["ConnectionStringNull"]);
    SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
    mySqlCommand.CommandText = "EXECUTE storedFigli @IdPadre" ;
    mySqlCommand.Parameters.Add("@IdPadre", SqlDbType.Int).Value = idSponsor;
    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
    mySqlDataAdapter.SelectCommand = mySqlCommand;
    mySqlConnection.Open();
    int numberOfRows = mySqlDataAdapter.Fill(ds, "storedFigli");
    Console.WriteLine("numberOfRows = " + numberOfRows);
    mySqlConnection.Close();
    DataTable myDTable = ds.Tables["storedFigli"];
    ds.AcceptChanges();
    ds.Merge(myDTable);
    dgMappe.DataSource = ds;
    dgMappe.DataBind();

    Ho dinuovo un problema.... allora questo metodo viene richiamato da un altro metodo che mi estrae, tramite storedProcedure e mi mette dentro un mydataSet un record di valori....sono praticamente i valori del padre...e sono nel ds passato come parametro a questo metodo... allora qui lancio un'altra stored e prende i valori dei figli, li prende giusti ho controllato, però non riesco a fare funzionare il merge ossia nel datagrid dovrebbe stamparmi i valori ds passato come parametro più il merge con la nuova tabella dove ci sono 3 record figli!
    niente da fare...stampa solo i valori del padre...
    perchè non mi fa il merge...io non trovo l'errore

    ❌x❌x


  • Super User

    Le tabelle restituite dalle due select sono le stesse? Cosa contiene ds alla fine?


  • User

    praticamente le query vengono effettuate sulle stessa tabella...

    che ha struttura

    id | nome | cognome | idPadre | Bloccato etc etc

    questa è il primo metodo...che prende il padre...

    private void PopulateDataSetUsingProcedure()
    {
    SqlConnection mySqlConnection =new SqlConnection(ConfigurationSettings.AppSettings["ConnectionStringNull"]);
    int idPadre=999;
    SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
    mySqlCommand.CommandText = "EXECUTE storedPadre @IdPadre" ;
    mySqlCommand.Parameters.Add("@IdPadre", SqlDbType.Int).Value = idPadre;
    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
    mySqlDataAdapter.SelectCommand = mySqlCommand;
    DataSet myDataSet = new DataSet();
    mySqlConnection.Open();
    int numberOfRows = mySqlDataAdapter.Fill(myDataSet, "storedPadre");
    Console.WriteLine("numberOfRows = " + numberOfRows);
    mySqlConnection.Close();
    DataTable myDataTable = myDataSet.Tables["storedPadre"];
    DataRow dr=myDataTable.Rows[0];
    if (myDataTable.Rows.Count > 0)
    {
    for(int i = 0 ; i<myDataTable.Rows.Count;i++ )
    {
    if (myDataTable.Rows*["Id"].ToString() != "")
    {
    string idRicerca= myDataTable.Rows*["Id"].ToString();
    int idSponsor = Int16.Parse(idRicerca);
    ricercaFigli(idSponsor,myDataSet);
    }
    }
    }
    }

    questo è il secondo dove prendo i figli e richiamo la seconda stored procedure....a cui viene passato l'id padre.

    private void ricercaFigli(int idSponsor , DataSet ds)
    {
    SqlConnection mySqlConnection =new SqlConnection(ConfigurationSettings.AppSettings["ConnectionStringNull"]);
    SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
    mySqlCommand.CommandText = "EXECUTE storedFigli @IdPadre" ;
    mySqlCommand.Parameters.Add("@IdPadre", SqlDbType.Int).Value = idSponsor;
    SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
    mySqlDataAdapter.SelectCommand = mySqlCommand;
    mySqlConnection.Open();
    int numberOfRows = mySqlDataAdapter.Fill(ds, "storedFigli");
    Console.WriteLine("numberOfRows = " + numberOfRows);
    mySqlConnection.Close();
    DataTable myDTable = ds.Tables["storedFigli"];
    ds.AcceptChanges();
    ds.Merge(myDTable);
    ds.Tables.Add(myDTable);
    ds.AcceptChanges();
    dgMappe.DataSource = ds;
    dgMappe.DataBind();
    }

    alla fine ds...quando mi carica il data grid mi carica solo i risultati della prima query, eppure i dati li trova perchè contando le righe nel secondo metodo trovo tutti e tre i figli!

    :?:?:?

    sapete aiutarmi?


  • Super User

    Ciao, la tabella sarà anche la stessa, ma il nome è diverso, senò perchè fai myDataSet.Tables["storedPadre"] e poi ds.Tables["storedFigli"]??


  • User

    ok ma come faccio ad unire le due tabelle nel dataset?


  • Super User

    Beh comincia con chiamarle allo stesso modo, credo dovrai cambiare le stored provcedures. Perchè non fai vedere anche le stored procedures?


  • User

    ecco la storedFigli

    ALTER PROCEDURE [dbo].[storedFigli]
    -- Add the parameters for the stored procedure here
    @IdPadre int
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * from clienti
    where Sponsor=@IdPadre
    

    END

    e la storedPadre

    ALTER PROCEDURE [dbo].[storedPadre]
    -- Add the parameters for the stored procedure here
    @IdPadre int
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * from clienti
    where Id=@IdPadre
    

    END

    😢😢😢😢


  • Super User

    Queste non sono quelle originali, perchè ALTER PROCEDURE modifica una procedura già esistente, cerca meglio nel db manager


  • User

    Si però la stored procedure salvata è questa...
    ;);););)


  • Super User

    Ok, il ds cosa contiene una volta fatte le query? Numero tabelle, nome ecc?