Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856

    Modifica dati in tabella db usando dataset & co

    'Giorno,
    devo inserire un record in una tabella di un db.
    Di solito uso tutt'altra strada ma stavolta lo dovrò fare usando un dataset.
    Ho scritto così, il codice in debug gira senza errori ma alla fine non vedo il record inserito in tabella sql.
    Cosa sbaglio?

    codice:
    Using cn2
        cn2.Open()
        'creo datatable con i dati della tabella ZWTOFF
        Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM ZWTOFF ", cn2)
        Dim ds As DataSet = New DataSet()
        da.Fill(ds)
        
        Dim dt = ds.Tables(0)
        
        'creo nuova riga nel DataTable
        Dim dr As DataRow = dt.NewRow()
        
        'setto i valori da inserire
        dr!to_id = 1
        dr!to_prelevabile = 0
        dr!.....
        
        'inserisco riga in datatable
        'ds.Tables(0).ImportRow(dr)
        dt.Rows.Add(dr)
    
        'aggiorno adapter
        'da.Update(ds, "ZWTOFF")
        da.Update(ds)
     End Using
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,000
    Il dataadapter ha la query di update assegnata ?

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    No appunto, ho corretto così e così funzia
    codice:
     'inserisco riga
    'ds.Tables(0).ImportRow(dr)
    dt.Rows.Add(dr)
    dt.AcceptChanges()
    
    Dim commandBuilder = New SqlCommandBuilder(da)
    da.UpdateCommand = commandBuilder.GetUpdateCommand()
    da.InsertCommand = commandBuilder.GetInsertCommand()
    'aggiorno adapter
    da.Update(ds, ds.Tables(0).ToString)
    ...

    Approfitto per chiedere altra cosa:
    il primo datatable l'ho aggiunto al dataset creando il dataadapter poi usando fill, like this
    codice:
    Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM ZWTOFF ", cn2) 
    Dim ds As DataSet = New DataSet()
    da.Fill(ds)
    Ora per aggiungere altre tabelle al dataset devo sempre creare altri dataadapter uno per tabella e poi "fillare"?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    no, che io ricordi basta associare un altro SelectCommand con la seconda query all'Adapter:

    codice:
    .....
    connection etc..
    .....
    
    Dataset ds = new Dataset();
    
    string primaQuery = "Select * from pippo";
    string secondaQuery = "Select * from paperino";
    
    try
    {
        connection.Open();
    
        command = new SqlCommand(primaQuery, connection);
        adapter.SelectCommand = command;
        adapter.Fill(ds, "prima tabella");
    
        adapter.SelectCommand.CommandText = secondaQuery;
        adapter.Fill(ds, "seconda tabella");
    
        adapter.Dispose();
        command.Dispose();
        connection.Close();
    }
    
    .....
    

    cosi' avrai

    ds.Tables[0]
    ds.Tables[1]
    Ultima modifica di djciko; 07-05-2020 a 10:37

  5. #5
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Hmm superata la domanda precedente me ne viene un'altra:
    sto modificando il mio codice in modo da usare un solo dataset e un solo dataadapter (come indicato in una delle risposte qui https://stackoverflow.com/questions/...ultiple-tables) per caricare nel dataset più tabelle.
    codice:
     Dim da As SqlDataAdapter = New SqlDataAdapter()
    Dim ds As DataSet = New DataSet()
    Dim sqlc As SqlCommand
    
    'creo datatable con i dati della tabella ZWTOFF
    sqlc = New SqlCommand("SELECT * FROM ZWTOFF ", cn2)
    ds.Tables.Add("ZWT")
    da.SelectCommand = sqlc
    da.Fill(ds.Tables("ZWT"))
    
    'creo datatable con i dati della tabella ZWMOFF
    sqlc = New SqlCommand("SELECT * FROM ZWMOFF ", cn2)
    ds.Tables.Add("ZWM")
    da.SelectCommand = sqlc
    da.Fill(ds.Tables("ZWM"))
    
    'creo tutti i comandi di insert e update per le varie tabelle del dataset???
    Dim commandBuilder = New SqlCommandBuilder(da)
    da.UpdateCommand = commandBuilder.GetUpdateCommand()
    da.InsertCommand = commandBuilder.GetInsertCommand()
    Ma ora che ho usato un dataadapter per entrambe le tabelle, come fa l'SqlCommandBuilder a generare i comandi di insert/update per tutte le tabelle?
    E anche se non uso l'SqlCommandBuilder, come faccio a indicare i comandi di insert/update per le due tabelle nel dataset avendo un unico dataadapter??
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    ah grazie dj, non avevo neanche visto la tua risposta
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    ci sono InsertCommand, UpdateCommand, DeleteCommand oltre al SelectCommand

  8. #8
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Si certo ma il problema rimane, come faccio a riferire insert e update (i due comandi che mi interessano) alle diverse tabelle nel dataset?
    I comandi sono legati al dataadapter ma se il dataadapter vale per tutte le tabelle nel dataset come faccio a dirgli quale comando usare quando mi riferisco a una tabella o un'altra?
    (la cosa sarebbe semplice se avessi un dataadapter per ogni tabella però mi pare strano che si debba usare n dataadapter per n tabelle....)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    credo che tu stia confondendo le operazioni (command) dirette sul DB (come una Select) con quelle temporanee sui Datatables, che devono essere soggette poi ad AcceptChanges e sono ancora in memoria, prima dell'update finale tramite il DataAdapter (che tra l'altro come secondo argomento ha il nome della table).

    guarda qui:
    http://quickstart.developerfusion.co...ataFromDB.aspx

    ad un certo punto dell'articolo dice "Before submitting the update back to the database, you need to setup the InsertCommand" ......



    Comunque non mi è chiaro perche' vuoi seguire questa metodologia con ADO.Net classic, che è sempre stata farraginosa e complicata, invece di fare un comando alla volta. C'e' un motivo o è per studio ?

  10. #10
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,856
    Sia studio che altro: dovendo lavorare su più di una tabella contemporaneamente (testate, righe e altre tabelle collegate), per evitare il rischio di avere record scollegati se qualcosa andava storto nel mezzo, pensavo che sarebbe stato furbo usare un dataset e fare tutte le modifiche definitive in db in un unico step alla fine.
    Però è effettivamente farraginoso se devo usare un dataadapter per ogni tabella.
    Il commandbuilder che ho usato crea da solo le istruzioni insert e update per una table nel dataadapter: nel mio mondo ideale speravo che creasse tutte le istruzioni per tutte le tabelle nel dataset ma non è possibile...
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.