Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    34

    Database non si aggiorna dopo inserimento dati in DataTable

    Salve,
    ho trovato questo link http://www.adszone.org/vbnet.aspx?page=adonet3 in cui è riportato un esempio di come utilizzare DataSet, DataTable e aggiornare il database dopo aver aggiornato i due oggetti. Ho modificato questo esempio lanciando il metodo di Inserimento() da un pulsante. I dati da inserire vengono letti riga per riga da un file e la DataTable del DataSet mi si riempie normalmente. Subito dopo il metodo Inserimento lancio anche il metodo AggiornaDatabase() ma non aggiorna nulla. Dove è l'errore?



    File contenente il Form (è solo lo spezzone che interessa)
    codice:
    Dim db As New GestioneDatabase
    
    Private Sub Leggi()
    
    
    
            'Dim oFile As System.IO.File
            Dim oRead As System.IO.StreamReader
            Dim indirizzo As String = ""
    
    
    
            Try
                oRead = IO.File.OpenText("C:\elencocomuni.txt")
              
                While oRead.Peek <> -1
    
                    indirizzo = oRead.ReadLine().ToString()
                    'MsgBox(oRead.ReadLine())
                    Riempi(indirizzo)
    
    
                End While
                oRead.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
    
    
    
            End Try
        End Sub
    
    Private Sub Riempi(ByVal indirizzo As String)
    
            Dim chiavi As String = "comune territorio arte cultura sociale vita"
            Dim home As Boolean = False
    
            Dim visite As Int32 = 0
            Dim ind As String = indirizzo
    
            db.Inserimento(ind, chiavi, home, visite)
            db.AggiornaDatabase()
    
    
        End Sub
    File contenente la gestione del Database (solo lo spezzone che interessa):
    codice:
    Public Sub AggiornaDatabase()
    
            If objDataSet Is Nothing Then Exit Sub
    
            Dim objDataAdapter As SqlCeDataAdapter
    
            Try
                Open()
    
                Dim sQuery As String = "select * from sitipermessi"
                Dim sInsert As String = "insert into sitipermessi " & _
                                "(Indirizzo, ParoleChiavi, Home, Visite) values (?, ?, ?, ?)"
                Dim sDelete As String = "delete from sitipermessi where ID = ?"
                Dim sUpdate As String = "update sitipermessi " & _
                                "set Indirizzo = ?,ParoleChiavi = ?, Home = ?, Visite = ? where ID = ?"
    
                Dim objInsertCmd As New SqlCeCommand(sInsert, objConn)
                Dim objDeleteCmd As New SqlCeCommand(sDelete, objConn)
                Dim objUpdateCmd As New SqlCeCommand(sUpdate, objConn)
    
                Dim objParam As SqlCeParameter
    
                ' Insert
                objParam = objInsertCmd.Parameters.Add("@ind", _
     SqlDbType.NVarChar, 100)
                objParam.SourceColumn = "Indirizzo"
                objParam.SourceVersion = DataRowVersion.Original
    
                objParam = objInsertCmd.Parameters.Add("@chiavi", _
     SqlDbType.NText)
                objParam.SourceColumn = "ParoleChiavi"
                objParam.SourceVersion = DataRowVersion.Original
    
                objParam = objInsertCmd.Parameters.Add("@home", _
    SqlDbType.Bit)
                objParam.SourceColumn = "Home"
                objParam.SourceVersion = DataRowVersion.Original
    
                objParam = objInsertCmd.Parameters.Add("@visite", _
    SqlDbType.Int)
                objParam.SourceColumn = "Visite"
                objParam.SourceVersion = DataRowVersion.Original
    
                ' Delete
                objParam = objDeleteCmd.Parameters.Add("@id", _
     SqlDbType.Int)
                objParam.SourceColumn = "ID"
                objParam.SourceVersion = DataRowVersion.Original
    
                ' Update
                objParam = objUpdateCmd.Parameters.Add("@Indirizzo", _
     SqlDbType.NVarChar)
                objParam.SourceColumn = "Indirizzo"
                objParam.SourceVersion = DataRowVersion.Current
    
                objParam = objUpdateCmd.Parameters.Add("@chiavi", _
     SqlDbType.NText)
                objParam.SourceColumn = "ParoleChiavi"
                objParam.SourceVersion = DataRowVersion.Current
    
                objParam = objUpdateCmd.Parameters.Add("@home", _
     SqlDbType.Bit)
                objParam.SourceColumn = "Home"
                objParam.SourceVersion = DataRowVersion.Current
    
                objParam = objUpdateCmd.Parameters.Add("@visite", _
     SqlDbType.Int)
                objParam.SourceColumn = "Visite"
                objParam.SourceVersion = DataRowVersion.Current
    
                objParam = objUpdateCmd.Parameters.Add("@id", _
     SqlDbType.Int)
                objParam.SourceColumn = "id"
                objParam.SourceVersion = DataRowVersion.Original
    
                objDataAdapter = New SqlCeDataAdapter(sQuery, objConn)
                Dim cmdBldr = New SqlCeCommandBuilder(objDataAdapter)
    
    
    
    
                objDataAdapter.InsertCommand = objInsertCmd
                objDataAdapter.DeleteCommand = objDeleteCmd
                objDataAdapter.UpdateCommand = objUpdateCmd
    
    
                ' table.AcceptChanges()
                'MessageBox.Show("Number of rows: " & objDataSet.Tables(0).Rows.Count)
    
    
                Try
                    objDataAdapter.Update(objDataSet.Tables(0))
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
                If Not Nothing Is objDataAdapter.InsertCommand Then
                    objDataAdapter.InsertCommand.Dispose()
               
                End If
    
            Catch e As Exception
                MsgBox(e.Message)
            End Try
    
                Close()
    
        End Sub
    
     Public Sub Inserimento(ByVal ind As String, ByVal chiavi As String, ByVal home As Boolean, _
                               ByVal visite As Int32)
            If objDataSet Is Nothing Then Exit Sub
    
            Try
    
    
    
                With objDataSet.Tables("sitipermessi")
                    
    
    
                    'Dim table As DataTable = objDataSet.Tables("sitipermessi")
                    Dim objRow As DataRow = .Rows.Add
                    objRow.BeginEdit()
    
                    objRow("Indirizzo") = ind
                    objRow("ParoleChiavi") = chiavi
                    objRow("Home") = home
                    objRow("Visite") = visite
                    objRow.EndEdit()
                    'table.Rows.Add(objRow)
    
                End With
    
            Catch e As Exception
                MsgBox(e.Message)
            End Try
        End Sub

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ho aggiunto il linguaggio nel titolo della discussione (obbligatorio, come da Regolamento interno. Spero di averlo azzeccato.

    Inoltre, ho aggiunto i tag CODE al codice, per renderlo leggibile. In futuro pensaci tu a tutte queste cose.

    Uso dei tag CODE:

    [CODE]
    Poi si incolla il codice
    [/CODE]


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    34
    Chiedo venia, hai ragione sul Titolo! Per il tag code l'ho fatto ma continuava a darmi errore al momento dell'invio . Infatti ho messo due post quasi uguali proprio perchè continuava ad uscirmi un errore e non sono più riuscito a cancellarne uno. Forse c'era un malfunzionamento temporaneo ieri quando ho postato.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Non ho letto tutto ma da una guardata veloce non vedo la chiamata al metodo per eseguire i comandi SQL.

    objInsCmd.ExecuteNonQuery()
    objxxxxxxx.ExecuteNonQuery()

    Ciao.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Non ho letto tutto ma da una rapida guardata mi sembra che manchi la chiamata al metodo per eseguire i comandi SQL.

    objInsCmd.ExecuteNonQuery()
    objXXXXX.ExecuteNonQuery()

    Ciao.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    34
    grazie Calaf della risposta . Se inserisco il metodo che mi suggerisci tu dopo l'Update del Dataset non scrive nulla sul db. Se lo metto prima mi esce l'errore che riporto in allegato.
    Immagini allegate Immagini allegate

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    34
    Ciao, ho capito il problema. Il codice e' corretto, funziona sia se utilizzo l'objAdaptor.Update() che l'executeNonQuery() (in quel caso devo aggiungere un objParam.Value=...). Solo che l'inserimento dei dati avviene nella copia del file sdf che VB inserisce nella cartella Bin. Come devo quindi creare il mio database in modo da referenziarmi sempre a quello più aggiornato? Io lo avevo inserito nella stessa cartella dove avevo i files .vb

  8. #8

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    34
    Grazie, più semplice del previsto! Solo che come metto la stringa di connessione? "DataSource=nome.sdf;Password=..." mi restituisce "Origine dati non trovata" mentre se inserisco tutto il percorso completo funziona.

  10. #10

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.