- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- aggiornare dati un DataSet
-
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'errorexx
-
Le tabelle restituite dalle due select sono le stesse? Cosa contiene ds alla fine?
-
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?
-
Ciao, la tabella sarà anche la stessa, ma il nome è diverso, senò perchè fai myDataSet.Tables["storedPadre"] e poi ds.Tables["storedFigli"]??
-
ok ma come faccio ad unire le due tabelle nel dataset?
-
Beh comincia con chiamarle allo stesso modo, credo dovrai cambiare le stored provcedures. Perchè non fai vedere anche le stored procedures?
-
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
-
Queste non sono quelle originali, perchè ALTER PROCEDURE modifica una procedura già esistente, cerca meglio nel db manager
-
Si però la stored procedure salvata è questa...
;);););)
-
Ok, il ds cosa contiene una volta fatte le query? Numero tabelle, nome ecc?