53 messaggi dal 02 gennaio 2007
Buongiorno ho fatto una procedura che legge un csv , lo spezza lo carica in una matrice , ora vorrei a creare una procedura che mi permetta di caricare la matrice in tabella con loop , al momento uso codice come questo ma inserisce un record alla volta c'è una maniera per aggiungere i record in tabella ? avevo visto qualcosa dell'oggetto row e la proprietà add, ma si usa solo con i dataset.

come posso creare un loop di inserimento senza stare sempre a chiudere la connessione.


Dim CN As New OleDbConnection()
CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\alunni.mdb"
Dim CMD As OleDbCommand
CMD = CN.CreateCommand()
CN.Open()
Console.WriteLine("Connessione Aperta")
Console.ReadKey()
CMD.CommandType = CommandType.Text
CMD.CommandText = "INSERT INTO Alunno (Nome, Cognome) VALUES ('Marco', 'Rossi')"
Dim num As Integer = CMD.ExecuteNonQuery()
Console.WriteLine("Record inseriti (0)", num)
CN.Close()
Console.WriteLine("Connessione Chiusa")
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
va quasi bene quello che stai facendo, devi semplicemente spostare le istruzioni che aprono e chiudono al connessione al di fuoi del loop. Idem per l'OleDbCommand, infatti puoi riutilizzare sempre lo stesso comando per inviare più insert. L'importante è che ad ogni iterazione del ciclo ne modifichi i parametri.

Quindi: all'interno del loop lasci solo le assegnazioni dei parametri e l'istruzione CMD.ExecuteNonQuery(). Tutto il resto fuori.

Ecco l'esempio di un loop in cui inserisco 1000 nomi nella tabella Alunno.
Using CN As New OleDbConnection()
    CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\alunni.mdb"
    Using CMD As OleDbCommand = CN.CreateCommand()
        CN.Open()
        Console.WriteLine("Connessione Aperta")
        CMD.CommandType = CommandType.Text
        CMD.CommandText = "INSERT INTO Alunno (Nome, Cognome) VALUES (@Nome, @Cognome)"
        CMD.Parameters.AddWithValue("Nome", "")
        CMD.Parameters.AddWithValue("Cognome", "")
        Dim recordInseriti = 0

        For i = 1 To 1000
            CMD.Parameters("Nome").Value = "Marco" & i
            CMD.Parameters("Cognome").Value = "Rossi" & i
            recordInseriti += CMD.ExecuteNonQuery()
        Next

        Console.WriteLine("Record inseriti {0}", recordInseriti)
    End Using
End Using
Console.WriteLine("Connessione Chiusa")


Ovviamente tu dovrai modificare il loop secondo le tue esigenze. Per esempio, i nomi da inserire non saranno 1000 come nel mio caso, ma saranno esattamente quelli che hai nella matrice. Anche i valori dei parametri Nome e Cognome dovrai prenderli da lì.

A proposito della matrice, penso che potresti anche non crearla. Infatti ti basterebbe fare un ciclo sulle righe del CSV e per ogni riga (ecco il tuo loop) inserisci direttamente il nome e cognome trovato.

ciao,
Moreno
Modificato da BrightSoul il 10 luglio 2016 18.56 -

Enjoy learning and just keep making

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.