Agiornare una tabella di access

giovedì 23 ottobre 2008 - 15.39

From15 Profilo | Newbie

Salve a tutti, vi espongo il mio problema: Leggo i dati da un file CSV, e li salvo in una DataTable, dopodichè apro un file di Access (mdb) al quale cancello tutti i dati di una tabella specifica (DELETE * FROM nometabella). Ora vorrei mettere in quella tabella che ho appena pulito i dati presenti nella DataTable contenente i dati del file CSV.

String Query;
OleDbCommandBuilder ComandoQuery;
DataSet DatiTemporanei;
OleDbDataAdapter AdattatoreDataBase;
DataTable TabellaDaAggiornare;
DataTAble TabellaCSV
Int32 i;

i = 0;
TabellaDaAggiornare = new DataTable ();
DatiTemporanei = new DataSet();
// per prima cosa cancello i recod presenti nella tabella da aggiornare
// creo la query
Query = "DELETE * FROM " + NomeTabella;

// istanzio l'adattatore passandogli la query e la connessione attiva sul DataBase
AdattatoreDataBase = new OleDbDataAdapter(Query,ConnessioneDB);

// istanzio l'oggetto comando associandolo all'adattatore
ComandoQuery = new OleDbCommandBuilder(AdattatoreDataBase);

// faccio eseguire la query
AdattatoreDataBase.Fill(TabellaDaAggiornare);

Una volta effettuato il fill come faccio ad aggironare la tabella qualcuno ha un'idea da suggerirmi??
Grazie in anticipo!
Andrea

alexmed Profilo | Guru

Ciao
Premesso che dò per scontato che i campi del CSV siano gli stessi della tua tabella
Una soluzione potrebbe essere usare questa query:

LOAD DATA INFILE "C:\myFile.CSV"
INTO TABLE myTable
FIELDS
TERMINATED BY ","
ENCLOSED BY "'"
LINES
TERMINATED BY '\r\n'
(myColumn1, myCol2, myCol3, myCol4, myCol5, ecc...)

Potresti, credo, addirittura accodarla alla tua DELETE ovvero:

query = DELETE * FROM nome_tabella; LOAD DATA INFILE eccc. ecc..


quindi senza passare dal DataTable


Ciao

From15 Profilo | Newbie

Allora, i campi sono lo stesso numero quindi le row della tabella creata dal file CSV hanno lo stesso numero e formato dei campi della tabella access.
Preferivo cmq rimanere con l'utilizzo di DataTable anche perchè, tramite DataGridview, le faccio vedere all'utente.
Non hai mai provato a farlo con le DataTable?
Intanto grazie lo stesso ora ci porvo con il metodo che mi hai detto...
Andrea

alexmed Profilo | Guru

Ciao
con il DataTable non ho mai provato ma credo sia possibile.

Per ovviare al discorso della visualizzazione su DataGridView puoi seguire due strade:

La prima prevede di caricare il file direttamente sulla DataGridView e poi salvare sul DB
Oppure prima salvi sul DB come detto prima e poi carichi i dati sulla DGV.

Per caricare i dati sulla DGV dal file CSV puoi usare questa funzione (prima devi aggiungergli le colonne):

Dim fName As String = ""

OpenFileDialog1.InitialDirectory = "C:\"
OpenFileDialog1.Filter = "CSV files (*.csv)|*.CSV"
OpenFileDialog1.FilterIndex = 2
OpenFileDialog1.FileName = ""
OpenFileDialog1.RestoreDirectory = True

If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
fName = OpenFileDialog1.FileName
End If

Me.TextBox1.Text = fName

Dim TextLine As String = ""
Dim SplitLine() As String

If System.IO.File.Exists(fName) = True Then
Dim objReader As New System.IO.StreamReader(fName)
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SplitLine = Split(TextLine, Me.txtSEPARATOR.Text)
Me.DataGridView1.Rows.Add(SplitLine)
Loop
Else

MsgBox("File Does Not Exist")

End If

è scrita in VB ma trasformarla in C non dovrebbe essere complicato

Ciao
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