Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215

    [VbNET 2005] Inserire piu di 4000 record alla volta in Sqlserver

    Ciao a tutti,
    ho dovuto realizzare un programma che se rileva l'inserimento di file con estensioni .txt in una cartella, ne legge il contenuto e lo scrive all'interno di una tabella di sqlserver 2005.

    Ho già ampiamente realizzato il programma e trasformato in un servizio,
    solo che sto cercando di ottimizzarlo.

    Il problema maggiore e che questi txt all'interno contengono almeno 4000 righe
    di coordinate X e Y.

    Attualmente facci un ciclo su un array ed ogni volta faccio l'insert su un database.
    Ho provato anche a mandare la stringa con tutte le x e le y e poi lavorarla con una stored procedure richiamata dall'applicazione ma sembra essere piu lenta del primo metodo.
    Considerando che di questi file ne arrivano almeno 1000 al giorno, chiedo se qualcuno ha qualche dritta da darmi o se qualcuno che ha avuto un simil problema sa come consigliarmi.

    Grazie anticipatamente per ogni risposta.

    Malkav
    La mia pazzia continua a prosciugare la mia anima

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mi sembra difficile darti qualsiasi dritta visto che:

    1 - non sappiamo quale implementazione hai usato
    2 - con conosciamo alcun dettaglio dei file
    3 - non conosciamo il codice che hai usato

    Ottimizzare significa migliorare quello che c'è, ma se non sappiamo quello che c'è che consiglio possiamo dare?


  3. #3
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    Originariamente inviato da gibra
    Mi sembra difficile darti qualsiasi dritta visto che:

    1 - non sappiamo quale implementazione hai usato
    2 - con conosciamo alcun dettaglio dei file
    3 - non conosciamo il codice che hai usato

    Ottimizzare significa migliorare quello che c'è, ma se non sappiamo quello che c'è che consiglio possiamo dare?

    Ehmm.....
    non mi sembrava difficile da capire sul fatto di fare un ciclo su un array di 4000 elementi e per ognuno fare un insert in una tabella di sql server.
    Questo è il metodo per cosi dire lento!
    La domanda era se qualcuno conosceva metodi migliori!!
    La mia pazzia continua a prosciugare la mia anima

  4. #4
    Originariamente inviato da M@LKAV
    Ehmm.....
    non mi sembrava difficile da capire sul fatto di fare un ciclo su un array di 4000 elementi e per ognuno fare un insert in una tabella di sql server.
    Questo è il metodo per cosi dire lento!
    La domanda era se qualcuno conosceva metodi migliori!!
    potresti provare a fare un ciclo e a crearti 4000 righe datarow di un datatable
    contenuto in un dataset
    e poi fare un unico update utilizzando un dataAdapter.
    Penso che potresti notare un certo miglioramento nelle prestazioni... sempre meglio
    di fare 4000 accessi al db...

  5. #5
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    Originariamente inviato da Max Mercury
    potresti provare a fare un ciclo e a crearti 4000 righe datarow di un datatable
    contenuto in un dataset
    e poi fare un unico update utilizzando un dataAdapter.
    Penso che potresti notare un certo miglioramento nelle prestazioni... sempre meglio
    di fare 4000 accessi al db...
    L'accesso al db e unico!!
    Comunque potrebbe essere una buona idea provo.
    La mia pazzia continua a prosciugare la mia anima

  6. #6
    E' lo stesso metodo del quale parlavamo per e-mail!

    Max mercury... puoi postare un esempio di come si può fare l'aggiunta di un record e utilizzare poi l'Update? Grazie
    Programmazione .NET
    http://www.samueletosatto.tk

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da M@LKAV
    Ehmm.....
    non mi sembrava difficile da capire sul fatto di fare un ciclo su un array di 4000 elementi e per ognuno fare un insert in una tabella di sql server.
    Questo è il metodo per cosi dire lento!
    La domanda era se qualcuno conosceva metodi migliori!!
    E la domanda è sbagliata...
    Tu hai scritto:
    Originariamente inviato da M@LKAV
    Attualmente facci un ciclo su un array ed ogni volta faccio l'insert su un database.
    Ora, dire che fai un'INSERT di ogni riga non significa nulla, in sé, e non fa capire niente.

    - Usi un'array, ok, ma di cosa?
    - Ovvero: come l'hai caricato?
    - Il file TXT come lo apri e leggi?
    - a) tutto in uno volta?
    - b) oppure riga per riga?
    (già questo può fare la differenza)
    - quanti dati (campi) vi sono in ogni linea?
    - come fai l'INSERT?

    Ripeto, se chiedi un'ottimizzazione, devi spiegare i dettagli anche minimi.
    Se poi non hai voglia di farlo, è un'altra questione.


  8. #8
    Originariamente inviato da tossam
    E' lo stesso metodo del quale parlavamo per e-mail!

    Max mercury... puoi postare un esempio di come si può fare l'aggiunta di un record e utilizzare poi l'Update? Grazie
    Devi usare il metodo NewRow del DataTable, ti posto l'esempio che trovi anche
    su MSN:
    codice:
        Dim table As DataTable = dataSet.Tables("Suppliers")
        ' Use the NewRow method to create a DataRow 
        'with the table's schema.
        Dim newRow As DataRow = table.NewRow()
    
        ' Set values in the columns:
        newRow("CompanyID") = "NewCompanyID"
        newRow("CompanyName") = "NewCompanyName"
    
        ' Add the row to the rows collection.
        table.Rows.Add(newRow)
    c#

    codice:
        DataTable table;
        table = dataSet.Tables["Suppliers"];
        // Use the NewRow method to create a DataRow with 
        // the table's schema.
        DataRow newRow = table.NewRow();
    
        // Set values in the columns:
        newRow["CompanyID"] = "NewCompanyID";
        newRow["CompanyName"] = "NewCompanyName";
    
        // Add the row to the rows collection.
        table.Rows.Add(newRow);
    ovvio che tutto questo non basta devi usare un dataAdapter per riempirti il dataset
    e poi chiamare il metodo update sul dataAdapter
    trovi un esempio al link
    http://msdn.microsoft.com/it-it/libr...8VS.80%29.aspx

  9. #9
    Aggiungo una cosa, quando scrivi la query con la quale ti crei la tabella sul dataset
    occhio a come la scrivi!! da quello che ho capito sulla tabella ci sono molti record
    non ti serve a nulla tirarli su, perche tu non devi modificarli devi solo fare un insert
    di nuovi record, quindi ti conviene scrivere una select del tipo:

    Select top 0 * from nometabella

    tanto a te serve solo tirare su lo schema per poter creare una nuova row e appenderla
    alla tabella per poi chiamare il metodo DataAdapter.Update

  10. #10
    Utente di HTML.it L'avatar di M@LKAV
    Registrato dal
    Jan 2006
    Messaggi
    215
    Originariamente inviato da gibra
    E la domanda è sbagliata...
    Tu hai scritto:

    Ora, dire che fai un'INSERT di ogni riga non significa nulla, in sé, e non fa capire niente.

    - Usi un'array, ok, ma di cosa?
    - Ovvero: come l'hai caricato?
    - Il file TXT come lo apri e leggi?
    - a) tutto in uno volta?
    - b) oppure riga per riga?
    (già questo può fare la differenza)
    - quanti dati (campi) vi sono in ogni linea?
    - come fai l'INSERT?

    Ripeto, se chiedi un'ottimizzazione, devi spiegare i dettagli anche minimi.
    Se poi non hai voglia di farlo, è un'altra questione.

    Guarda lascia stare fidati
    Se alla fine non hai capito il problema non c'e bisogno che rispondi per forza.
    La mia pazzia continua a prosciugare la mia anima

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.