1 messaggio dal 18 aprile 2014
Buongiorno a tutti, devo inserire in una tabella database sqlserver, i valori che risiedono in una matrice con 10 righe e 5 colonne.
Qualcuno mi puo aiutare?
grazie.

DOMENICO
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Domenico, benvenuto nel forum!

Quando devi inserire dei dati in maniera massiva, fossero anche solo 10 records, puoi usare la classe SqlBulkCopy e il suo metodo WriteToServer disponibile anche nella sua versione asincrona.

domeweb ha scritto:

i valori che risiedono in una matrice

Se ti è possibile, lavora direttamente con un DataTable che è ideale per conservare dati finché si trovano in ambiente disconnesso.

ciao,
Moreno

Enjoy learning and just keep making
24 messaggi dal 19 ottobre 2010
Ciao puoi utilizzare anche linq ,
dalla table puoi crearti una lista di oggetti

var lista =
(from r in table new element
{
//lista di campi
});


DataContext.Tables.InsertAllOnSubmit(lista);

DataContext.SubmitChanges();
3.939 messaggi dal 28 gennaio 2003
 Non è che abbia capito molto della domanda, ma alla fin fine si tratta di comporre la stringa sql di insert e spedire i dati al database.
La cosa più semplice che si possa fare è l'esempio di sotto.
Ho usato Access ma poco cambia se si usa Oracle o altro.
E la matrice di prova è una matrice di 5x3

Certo, si possono usare i parametri, si possono migliorare tante cose, ma il punto di partenza potrebbe essere questo

Dim vs As String(,) = {
            {"1", "Stefano", "1.1"},
            {"2", "Carlo", "2.1"},
            {"3", "Nicola", "3.1"},
            {"4", "Pietro", "4.1"},
            {"5", "Lucia", "5.1"}
          }


Using con As New OleDbConnection(StringaConnessione)
  con.Open()

  For i As Integer = 0 To vs.GetUpperBound(0)
    Dim sql As String = String.Format("insert into tabella7 (id, nome, numero) values ({0}, '{1}', {2})", vs(i, 0), vs(i, 1), vs(i, 2))
    Dim comando As New OleDbCommand(sql, con)
    comando.ExecuteNonQuery()
  Next

End Using
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Pietro,
certamente, anche la tua è una soluzione percorribile, anche perché qui si tratta di inserire pochissimi records. Cominciano a sorgere dei problemi quando i record diventano molti. Il ciclo for infatti causa molte esecuzioni di ExecuteNonQuery() e perciò saranno necessari molti round-trips al server per inserire tutti i records. Potresti mitigare - lievemente - il problema usando i SqlParameters, perché la query d'inserimento sarebbe sempre la stessa (ciò che cambia è solo il valore dei parametri) e il motore di Sql Server potrebbe riutilizzare lo stesso piano d'esecuzione.
Invece, conviene far fruttare maggiormente ogni comando inviato al server, affinché inserisca più records alla volta. La classe BulkSqlCopy è in grado di farlo e ti permette anche di configurare il numero di records da inviare con ogni round-trip.

ciao,
Moreno

Enjoy learning and just keep making
3.939 messaggi dal 28 gennaio 2003
Ciao.
L'unico problema secondo me, è la poca chiarezza della domanda (o il mio poco acume nel capirla).
A me lascia intendere (ma ripeto, mi posso sbagliare) che non conosca gli "elementari", il buon vecchio e caro sql.
E vista la domanda, mi sorge il dubbio che non si sappiano prendere neanche i valori della matrice secondo gli indici.
Comunque, ripeto, posso sbagliarmi del tutto sulla interpretazione della domanda.

ciao ancora

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.