Esportare DataTable in Tabella Acces

venerdì 05 gennaio 2007 - 12.44

device78 Profilo | Junior Member

Salve,
leggendo da un file di testo mi creo un datatable (workTable) e mi creo dinamicamente una tabella access relativa vuota.
Poi attraverso il codice sottostante vorrei esportare il DataTable nella tabella access appena creata.
Il codice funziona perfettamente, ma riscontro un pò di lentezza nell'eseguire l'operazione di
miaDataAdapter.Update(workTable).
Avendo a che fare con circa 4-5 mila righe ci impiego + di 30 secondi per andare a termine.
Il Datable viene creato con una procedure di loop in modo velocissimo.Esiste un modo diverso da quello usato (e + veloce) per passare una DataTable ad una tabella acces?
Eventualemte ho anche una datagrid dove copio la DataTable per visualizzare a schermo i valori.Grazie





Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Cteniza Profilo | Guru

Credo che per access "fatto da codice" (ovvio che da access si fa ancora prima) la migliore situazione sia fare una "insert into ... select from testo" diretta su access con un unico command da eseguire una volta sola (usando il driver di testo)
in alternativa (ma più lenta) creare una query di "insert into" all'interno del programma ed eseguirla n volte (per il numero di righe) che dinamicamente vengono lette dal file di testo.
Qualsiasi altra soluzione come quella di passare dall'update del dataadapter io la scarterei.

device78 Profilo | Junior Member

fare un query n volte già l'ho provata ed è ancora + lenta del modo in cui faccio....
mentre " la migliore situazione sia fare una "insert into ... select from testo" diretta su access con un unico command da eseguire una volta sola (usando il driver di testo)" non l'ho provata.

dovrei studiarla perché non ho molto capito......scusami che intendi per "usando il driver di testo?

ciao e grazie

Cteniza Profilo | Guru

Si tratta di generare ed eseguire un oledbcommand con il comandtext:
Dim PathToTextFile As String = "C:\dbtesto"
Dim NomeFile As String = "myfile.txt"
Dim str As String = "INSERT INTO mytable SELECT * FROM " & _
"[Text;Database=" & PathtoTextFile & ";HDR=YES].[" & myfile & "]"
Dim cm As New OleDbCommand
cm.CommandText = str
Ovviamente devi avere già aperto la connessione ad access (o a qualsiasi altro database che supporti il comando)
Per quanto riguarda il file di testo ovviamente la prima riga dovrà contenere i nomi dei campi.
In alternativa puoi anche provvedere a fornire un file "schema.ini" per la definizione del tracciato del file di testo.

device78 Profilo | Junior Member

è una strada che ancora non percorro visto che il mio file di testo (dal quale mi creo il dataTable) contiene molti alti dati che non mi servono.In altre parole ho un grosso file di testo su cui conosco la struttura, ed estrapolo i dati necessari per fare un dataTable.
Leggendo però il tuo post ho pensato ad una cosa:
vedo che mi scrivi Dim str As String = "INSERT INTO mytable SELECT * FROM " & _

e pensavo di fare una insert sul mio database facendo la select (come scrivi tu) però sul DataTable.......

ci sto provando ma non ci riesco.Ecco il mio codice di prova

Dim strConn1 As String
strConn1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\data.mdb"
Dim cn1 As New OleDb.OleDbConnection(strConn1)
Dim sql1 As String

sql1 = "insert Into Dati Select * From" ->>>>>>>>Vorrei prelevare i dati dal DataTable

Dim cmd1 = New OleDb.OleDbCommand(sql1, cn1)
cmd1.connection.open()
cmd1.ExecuteNonQuery()

Grazie per la dritta

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5