Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it L'avatar di mUrf
    Registrato dal
    Apr 2001
    Messaggi
    193

    DataAdapter & Dataset (update)

    Salve qualcuno di voi ha già utilizzato un oggetto DataAdapter e DataSet per aggiornare una Table ? Perchè io ho difficoltà a dichiarare le variabili perchè sembra necessario dichiararle nel Global .... possibile mai ???

    Fatemi sapere grazie

    mUrf .NET

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ti mando un esempio, ma sono all'inizio anch'io
    codice:
        Private Sub btnProva_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProva.Click
            Dim sql$ = "SELECT * FROM COMUNE ORDER BY ID"
            Dim StringaConnessione$ = "File Name=C:\Documenti\Interdev\Prova_Access.UDL"
            Dim Adapter As New OleDbDataAdapter(sql, StringaConnessione)
            Dim DataSet As New DataSet()
    
            Adapter.Fill(DataSet, "comune")
    
            'ricavo il prossimo id
            Dim Tabella As DataTable = DataSet.Tables("comune")
            Dim NumeroRecord% = Tabella.Rows.Count
            Dim UltimoID% = CType(Tabella.Rows(NumeroRecord - 1)("ID"), Integer)
            Dim ProssimoID% = UltimoID + 1
    
            'modifico un valore
            DataSet.Tables("comune").Rows(2)("comune") = "xxx"
    
            'aggiungo una riga
            Dim riga As DataRow = DataSet.Tables("comune").NewRow()
            riga("id") = ProssimoID
            riga("comune") = "Monteponi"
            DataSet.Tables("comune").Rows.Add(riga)
    
            'aggiorno il database
            Dim CommandBuilder As New OleDbCommandBuilder(Adapter)
            Adapter.Update(DataSet, "comune")
    
        End Sub

  3. #3
    Utente di HTML.it L'avatar di mUrf
    Registrato dal
    Apr 2001
    Messaggi
    193
    Ciao pietro09, il tutto funziona se si tratta della stessa routine ... perchè tu crei il DataSet e poi lo aggiorni all'interno della stessa routine ... ma nel mio caso invece ?
    Io nel Page_Load carico i dati nel DataSet e li mostro a video ... dopodichè nel ButtonSave_Click dovrei aggiornare gli eventuali dati modificati .... sembra che debba duplicare tutto ... 2 DataAdapter; 2 DataSet; 2 StrSql (string) etc .... non mi sembra normale ... ho provato anche a dichiararle Public ma niente da fare ....


    Grazie
    mUrf .NET

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Senti, devo chiudere, ma da quello che ho capito, una volta creato il data set, popolato il datagrid, spedito la pagina al client, lo stato del server viene perso.

    L'evento page_load e l'evento ButtonSave_Click avvengono in momenti diversi

  5. #5
    Utente di HTML.it L'avatar di mUrf
    Registrato dal
    Apr 2001
    Messaggi
    193
    aaarrrgghhhh se mi dici che viene perso significa che dovrò ricrearmi tutto daccapo !!! Si i 2 eventoi avvengono in 2 momenti diversi quindi ... dovrò ricrearmi tutto ... però mi sembra strano che perda un DataAdapter .... bah .... se qualcuno ne sà qualcosina in + si faccia avantiiii !!!!

    grazie pietro09

    byez
    mUrf .NET

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ti mando un esempio preso da un libraccio. Si tratta di visualizzare dei dati in una griglia:
    Data la funzione:
    codice:
        Private Sub BindData(ByVal sql$)
            Dim Adapter As New OleDbDataAdapter(sql, ConnectionString())
            Dim DataSet As New DataSet()
            Adapter.Fill(DataSet, "COMUNI")
            Me.Label1.Text = "N° record = " & DataSet.Tables("comuni").Rows.Count().ToString
            Me.DataGrid1.DataSource = DataSet.Tables("comuni").DefaultView
    
            Me.DataGrid1.DataBind()
        End Sub
    Come vedi, Questa funzione, crea ogni volta un Adapter, un DataSet e popola la griglia.
    Viene richiamata:
    Evento Page_Load, DataGrid1_SortCommand, DataGrid1_PageIndexChanged, DataGrid1_EditCommand, DataGrid1_CancelCommand, DataGrid1_UpdateCommand.
    E ogni volta, il dataset viene creato e distrutto.

    Comunque, visto che non conosco i motivi, una variabile si può conservare nelle variabili di sessione, nelle variabili di applicazione o nel Page.ViewState.

  7. #7
    Utente di HTML.it L'avatar di mUrf
    Registrato dal
    Apr 2001
    Messaggi
    193
    Mmmmm.... ok ma io non uso DataGrid o robe simili ... mostro i dati in poche textBox e poi se l'utente modifica i dati all'interno di queste ... e clicca su [SALVA]_button lancio la funzione DataAdatpter.Update(Dataset) .... qualcuno l'ha già fatto ??

    thanks
    mUrf .NET

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    236

    Devi usare

    la variabile session per memorizzare i dati aggiornati del dataset, e poi richiami la funzione che ti genera update...se vuoi ho un esempio un pò particolare in cui ho fatto una classetta che mi genera gli update sia per l'inserimento dati sia per la cancellazione dati....non riesco a capire come possa funzionare per fare l'update fisico di record già esistenti

    koning

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    Re: Devi usare

    Originariamente inviato da koning
    la variabile session per memorizzare i dati aggiornati del dataset, e poi richiami la funzione che ti genera update...se vuoi ho un esempio un pò particolare in cui ho fatto una classetta che mi genera gli update sia per l'inserimento dati sia per la cancellazione dati....non riesco a capire come possa funzionare per fare l'update fisico di record già esistenti

    koning
    Sono all'inizio anch'io e mi interessa. Perchè non pubblichi il tuo esempio?
    Ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    236

    ok

    classe di creazione ds, update e cancellazione

    Class ds_load
    Public Function crea(ByVal stringa As String) As dati
    Dim collezione As DataRowCollection
    Dim ds As DataSet
    Dim rifclass As New Uccellari.utilita.setdata()
    ds = rifclass.GetData(stringa)
    collezione = ds.Tables(0).Rows
    crea.collection = collezione
    crea.tb = ds.Tables(0)
    ds.Clear()
    Return crea

    End Function

    il giro è un pò contorto e non si può spiegare in due righe, ma la prima procedura restituisce una struct che contiene una collezione di righe riempita dal dataset e la struttura della tabella da dove provengono i dati




    Public Function aggiorna_inseriti(ByVal stringa As String, ByVal collezione As DataRowCollection) As Boolean
    Dim rifclass As New Uccellari.utilita.setdata()
    Dim ds As New DataSet()
    Dim adapter As New SqlDataAdapter(stringa, rifclass.Connessione)
    Dim builder As New SqlCommandBuilder(adapter)
    adapter.Fill(ds)
    Dim numero, i As Byte
    numero = collezione.Count
    If numero = 0 Then Return True
    Dim lista(numero) As Object
    For i = 0 To numero - 1
    lista(i) = collezione.Item(i).ItemArray
    ds.Tables(0).Rows.Add(lista(i))
    Next
    Try
    adapter.Update(ds)
    Return True
    Catch exp As DBConcurrencyException
    Dim pippo As String = exp.Message
    If pippo.Length = 0 Then
    Else
    Return False
    End If
    End Try
    End Function

    'questa procedura carica la collezione di dati in un dataset fa l'update con il dataadapter appena creato

    Public Function aggiorna_svuota(ByVal stringa As String) As Boolean
    Dim rifclass As New Uccellari.utilita.setdata()
    Dim ds As New DataSet()
    Dim adapter As New SqlDataAdapter(stringa, rifclass.Connessione)
    Dim builder As New SqlCommandBuilder(adapter)
    adapter.Fill(ds)
    Dim i As Byte
    Dim conta As Byte
    If ds.Tables(0).Rows.Count = 0 Then Return True

    conta = ds.Tables(0).Rows.Count - 1

    For i = 0 To conta
    ds.Tables(0).Rows(i).Delete()
    Next i
    Try
    adapter.Update(ds)
    Return True
    Catch exp As DBConcurrencyException
    Dim pippo As String = exp.Message
    If pippo.Length = 0 Then
    Else
    Return False
    End If
    End Try
    End Function
    End Class

    End Namespace


    ----fine 1 parte

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 © 2025 vBulletin Solutions, Inc. All rights reserved.