Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: .Net + Help su porting

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2000
    Messaggi
    53

    .Net + Help su porting

    Buon giorno a tutti,

    ho il seguente problema:

    in un'operazione di porting dati ho la necessità di cancellare tutti i dati da una tabella prima di infasarla.

    La tabella contiene circa 850.000 record; quando dunque provo a cancellare tutto con una Delete (utilizzo Sql server) il sistema impega quasi un minuto...nel frattempo sto tentando di inserire i nuovi record e viene generato un errore:

    System.IrreguralArgumentException: Il sistema richiede uan connesione attiva (una cosa del genere).

    C'è qualche sistema per poter far si che l'inserimento dei nuovi record parta appena il prcesso di cancellazione sia terminato.....qualcosa a livello di transazione....io purtroppo faccio tutte le operazioni in un unico metodo.

    forse dovrei utilizzare i thread....qualcuno può darmi qualche dritta???

    Grazie.

  2. #2

    Re: .Net + Help su porting

    Originariamente inviato da bigrino
    in un'operazione di porting dati ho la necessità di cancellare tutti i dati da una tabella prima di infasarla. La tabella contiene circa 850.000 record;
    potresti provare ad utilizzare il comando TRUNCATE TABLE che e' piu' veloce del DELETE. es.
    TRUNCATE TABLE Clienti
    ....io purtroppo faccio tutte le operazioni in un unico metodo
    sembra che' lerrore sia nel metodo e nel tentativo di utilizzare una connessione che non e' stata aperta quindi puoi provare a postare un pezzo di codice
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2000
    Messaggi
    53
    Grazie...il suggerimento della truncate lo prendo in considerazione.

    Per quanto riguarda il posting di pezzi di codice...dovrei postarti un sacco di codice in quanto anche le operazioni sul database (datatable, dataset, etc...) li faccio in metodi miei.

    Secondo me, il problema è che mentre cancello i dati sulla tabella (sono più di 850000) questa dovrebbe essere lockata.....e l'insert non va a buon fine.

    Ora ho separato la cancellazione dall'inserimento...nel senso che faccio eseguire i due comandi in due metodi booleani (sembra funzionare).....ma un mio collega mi ha detto che una volta che viene lanciato un comando sql (tipo una delete) il metodo di Vb.Net che lo lancia non aspetta cmq che vengano cancellate le 850000 righe e rilascia il controllo all'altro metodo chiamante.

    Se questo è vero, mi servirebbe qualche cmq in T-Sql che mi dica se la tabella è lockata o meno...penso.

    Grazie.

  4. #4
    Originariamente inviato da bigrino
    ...dovrei postarti un sacco di codice ...
    intendo poche righe di codice prima dell'errore.
    ...ma un mio collega mi ha detto che una volta che viene lanciato un comando sql (tipo una delete) il metodo di Vb.Net che lo lancia non aspetta cmq che vengano cancellate le 850000 righe e rilascia il controllo all'altro metodo chiamante.
    per quel che so io, se ho un command con il commandtext che ha una delete e faccio qualcosa del tipo
    codice:
    m_conn.Open 
    m_cmd.ExecuteNonQuery
    m_conn.Close
    fintanto che il comando non finisce di fare il suo lavoro l'applicazione rimane bloccata li ad aspettare. Per verificare questa cosa, hai provato a mettere un breck point e seguire passo passo la tua funzione?
    Saluti a tutti
    Riccardo

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2000
    Messaggi
    53
    Purtroppo l'errore mi viene scritto in un file di testo...e per lo più sulla mi macchina in locale (dove eseguo il debug) non si verifica.....

    L'errore si verifica solo sulla macchina del cliente dove c'è solo l'eseguibile....

    Penso che l'errore si verifichi per il fatto che sql impiega troppo trempo per cancellare i record e nel frattempo la mia applicazione tenta di inserire record sulla tabella lockata.

    Sto tentanto di vedere se esiste qualche comando Sql che mi restituisce se la tabella è lockata.

    Grazie.

  6. #6
    Originariamente inviato da bigrino
    ...sql impiega troppo trempo per cancellare i record e nel frattempo la mia applicazione tenta di inserire record sulla tabella lockata.
    con l'errore esatto e l'esatta eccezione sollevata (che pero' mi sembra tu non abbia indicato nel post iniziale) puoi fare una ricerca su msdn.microsoft.com ed e' molto probabile che riesci cosi a trovare la strada per risolverlo. Dubito fortemente che la tua applicazione possa lanciare l'esecuzione di un command e senza aspettare il risultato esegua un altro command.
    Saluti a tutti
    Riccardo

  7. #7
    L'errore non e' sicuramente nel codice ma durante la richiesta d'inserimento in sql server.

    La tua richiesta d'inserimento parte quando Sql server sta ancora cancellando i dati e davanti ad un lock della table ti risponde che non può eseguire la tua richiesta.

    Devi ricorrere ad una stored procedure strutturata in questo modo,
    il mio e' puramente un codice di esempio e per tale va modificato con i valori delle tue tabelle

    codice:
    -- Stored Procedure N°1 Procedi ad eliminazione
    CREATE PROCEDURE DelMyRecords
    AS
    Delete * from tabella -- tuo delete sql
    GO
    -- Stored Procedure N°2 Inserisci dati
    CREATE PROCEDURE InsMyRecords
    AS
    Insert into tabella(campo) VALUES 'aaa'
    GO
    -- Stored Procedure Madre Cancella ed inserisci
    CREATE PROCEDURE DelAndCreate
    EXECUTE DelMyRecords
    EXECUTE InsMyRecords
    Da codice devi richiamare la tua Procedura DelAndCreate che prima di tutto richiama una stored procedure che procede all'eliminazione dei dati, una volta che i dati sono stati eliminati passa all'inserimento.

    Facci sapere

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2000
    Messaggi
    53
    Ok....grazie...proverò così....

    l'errore è sicuro quello della tabella lockata in fase di cancellazione.....

    ma non esiste un comando che restituisce se una tabella è lockata o meno....oppure si può fare a livello di transazioni???

    Grazie.

  9. #9
    Originariamente inviato da Jc_
    L'errore non e' sicuramente nel codice...
    Questa e' buona. Senza conoscere il codice e davanti ad un vago errore del tipo "Il sistema richiede uan connesione attiva" come fai a essere certo che l'errore e' nel codice oppure no?
    Se da una applicazione lancio un command sono certo semmai che la palla non torna indietro finche' il command non ha finito o non da errore altrimenti sarebbe un terno al lotto non credi?
    Per di piu' invece di supporre, e questo lo dico a bigrino, puoi vedere l'ordine di esecuzione dei command chiamati dalla tua applicazione con il profiler che e' appunto uno strumento per monitorare l'attivita' di sql-server oltre a usare funzioni di tracing dentro la tua app.
    Fermo restando che il consiglio di usare una stored procedure e' sempre buono.
    Saluti a tutti
    Riccardo

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2000
    Messaggi
    53
    Tu hai ragione....cmq io non faccio supposizioni...in quanto so di preciso dove si verifica l'errore (solo fuori)...e quando la tabella è vuota (non ci sono le 850000 duple) non ci sono problemi.

    Infatti mi rendo conto quando la tabella risulta lockata in quanto non riesco nemmeno ad eseguire una select.

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