Inserire gli elementi del dizionario nella tabella SQL come righe utilizzando IDatareader e SqlBulkCopy

c# datareader dictionary sql sqlbulkcopy

Domanda

Ho bisogno di migliorare notevolmente il tempo di esecuzione di un processo che attualmente è proprio così:

private Dictionary<int, SingleElement> elements_buffer;

// ... Create and load values into "elements_buffer"
// (string, Datetime, double)

string query = "INSERT INTO Tests.dbo.test_table "
    + "(element_name,element_init,element_width) VALUES";

SingleElement element_aux;

for (int i = 0; i < MAX_ELEMS_IN_DICT; i++)
{
    element_aux = elements_buffer[i];

    query = query
        + "('"
        + element_aux.name
        + "','"
        + element_aux.init
        + "',"
        + element_aux.width
        + ")";

    if (i < MAX_ELEMS_IN_DICT+1) {
        query = query + ",";
    }
}

// ... Execute the query

Stavo per usare Datatable per la nuova versione, ma ho letto sull'utilizzo di SqlBulkCopy insieme a IDatareader , come menzionato in:

Prestazioni SqlBulkCopy

C # loop e inserto di massa

Mi sembra una scelta migliore per il mio codice, ma non riesco a capire come codificarlo, anche se mi piacerebbe usarlo.

Posso avere qualche aiuto con il codice tradotto, per favore?

Grazie in anticipo

Risposta accettata

Come hai già capito, è necessario implementare IDataReader personalizzato. Poiché la tua fonte è Dictionary - solo pochi metodi / proprietà relativamente semplici come int FieldCount, bool Read (), l'oggetto Get (int i) dovrebbe essere implementato.

È possibile trovare esempi utili ( uno semplice ) di implementazioni personalizzate di IDataReader mediante l' identificazione personalizzata di sqlbulkcopy .

Inoltre, tenere presente che SqlBulkCopy ignora i trigger, le chiavi esterne e altri vincoli e non è in grado di gestire le eccezioni.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché