Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    262

    [ASP.NET] Importazione dati da DB

    Salve amici !!!
    Dovrei risolvere un problema in asp.net
    In pratica ho sviluppato una procedura che mi importa dei dati da una tabella in un altra tabella, quindi una procedura di importazione che mi funziona correttamente,ora però se rilancio la procedura premendi l'apposito tasto succede che mi reimporta nuovamente tutti i dati e li duplica,mentre io dovrei controllare che se esiste il record non deve reinserirlo o meglio dovrei fare l'update.
    Mi sapreste dire come posso fare questo tipo di controllo....vi posto la parte di codice nella quale faccio l'importazione.

    Dim dsAccess As New ImportDB
    dsAccess.NOMINATIVI.SetSelectCommand("SELECT * FROM NOMINATIVI", cn)
    dsAccess.NOMINATIVI.Fill()
    Dim drAccess As ImportDB.NOMINATIVIRow = dsAccess.NOMINATIVI(0)

    Dim dsTempAccount As New AccountDS
    'in questo punto eseguo una stored che mi inserisce un nuovo record--------
    dsTempAccount.Account.SetSelectCommand("EXEC GetAccountRecord " & CurrentUser.ID & "," & AGroup, cn)
    dsTempAccount.Account.Fill()
    dsTempAccount.Account.SetUpdateCommand()
    Dim drTempAccount As AccountDS.AccountRow = dsTempAccount.Account(0)
    For Each drAccess In dsAccess.NOMINATIVI
    With drTempAccount
    If Not drAccess.IsSocietàNull Then
    .Name = drAccess.Società
    Else
    If Not drAccess.IsNomeNull Then .Name = drAccess.Nome
    If Not drAccess.IsCognomeNull Then .Name &= " " & drAccess.Cognome
    End If
    End With
    Next

    Ora ogni qualvolta prima di andare a fare l'inserimento dovrei controllare se il record già esiste.......

    Resto in attesa di una vostra risposta
    GRAZIE

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    usa una chiave primaria che non permette duplicati.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    262
    la chiave primaria che non puiò essere duplicata ma è di tipo contatore quindinon posso fare un controllo....altrimenti?
    Potresti farmi un esempio?
    Grazie

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Io farei così:

    1) cambio la chiave da contatore ad integer (i contatori mi sono cordialmente antipatici )

    2) cancello tutti i record della tabella B che hanno chiavi nella tabella A

    3) ricopio tutti i record da A a B

    In questo modo elimino la necessità di fare un Update ed un Append, ma faccio un Delete ed un Append

    4) il processo lo eseguo in una transazione

    5) il metodo funziona, l'ho collaudato in Access
    Pietro

  5. #5
    se le tabelle sono identiche, potresti anche ricorrere al servizio offerto dalla funzione .merge del dataset.
    Altrimenti, io caricherei tutti i record dalla tabella dove potrebbero esserci record da inserire o da aggiornare.
    Fatto questo fai un semplice ciclo su ogni datarow nella tabella. All'interno del ciclo controlli se nella tabella nel db esiste gia' la tua chiave primaria. Se esiste mandi la datarow in una funzione di update, altrimenti la mandi in una funzione di insert.
    p.s. se nel db la colonna fosse impostata come chiave primaria, basterebbe fare un insert e se ti viene sollevata una eccezione fai automaticamente un update.
    pp.ss. visto che buona parte del codice presente nelle funzioni insert e update e' uguale potresti fare un'altra funzione che prepara il command e viene usata dalle due suddette funzioni
    es.

    codice:
    For Each _dr As DataRow In dt.Rows
                If isUpdate(CInt(_dr("tuoid"))) Then
                    updateRow(_dr)
                Else
                    insertRow(_dr)
                End If
            Next
    
    Private Function isUpdate(ByVal _id As Integer) As Boolean
            ' codice che se l'id esiste ritorna true altrimenti false
        End Function
    
        Private Function updateRow(ByVal _dr As DataRow) As Boolean
            ' codice per aggiornare il record
        End Function
    
        Private Function insertRow(ByVal _dr As DataRow) As Integer
            ' codice per inserire il record ed eventualmente ritornare l'id appena inserito
        End Function
    Saluti a tutti
    Riccardo

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    262
    mmmmmmm
    A dire il vero ci sto pensando ma purtroppo le tabelle non sono identiche......e ci sono alcuni campi che sono univoci ma alcune volte sono vuoti
    mentre io vorrei se possibile fare una cosa del genere....controllare prima dell'inserimento se quel record esiste nella tabella o no.....se esiste faccio l'update altrimenti inserisco.....

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    come fai a sapere se un record della tabella A esiste già in B?
    Pietro

  8. #8
    Originariamente inviato da Robots
    mentre io vorrei se possibile fare una cosa del genere....controllare prima dell'inserimento se quel record esiste nella tabella o no.....se esiste faccio l'update altrimenti inserisco.....
    si, come ti consigliavo appunto. Perche ci sono le faccine che sbattono contro il muretto?
    Saluti a tutti
    Riccardo

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.