Ciao a tutti,
vorrei leggere una tabella DBF e mergiare il suo contenuto intero in una tabella Access (chiaramente con la stessa struttura) usando DataTable.Merge, che pensavo facesse al caso mio.
Per semplificare, ho fatto un primo esempio con 2 tabelle dello stesso database access (Table1 con 2 records e Table2 con 1 record) con la stessa struttura.
Io utilizzo C# invece di visual basic, ma è il concetto che non capisco, quindi il linguaggio credo sia indifferente (scusate per il codice ma anche usando il tool di Diego, con VS2013 sembra non si ottenga il risultato voluto):
Qui creo il DataTable della prima tabella:
// Creates SQL String
string mySQL1= string.Format(CultureInfo.InvariantCulture, "SELECT id, description FROM Table1");
// Creates and fill DBF data table
OleDbCommand MyQuery = new OleDbCommand(mySQL1, this._accessConnection);
OleDbDataAdapter dbfDA = new OleDbDataAdapter(MyQuery);
DataTable dbfDT = new DataTable();
dbfDA.Fill(dbfDT);
Qui creo il DataTable della seconda tabella:
// Creates SQL String
string mySQL2 = string.Format(CultureInfo.InvariantCulture, "SELECT id, description FROM Table2");
// Creates Access data table
OleDbDataAdapter accessDA = new OleDbDataAdapter();
accessDA.SelectCommand = new OleDbCommand(mySQL2, this._accessConnection);
OleDbCommandBuilder cb = new OleDbCommandBuilder(accessDA);
DataTable accessDT = new DataTable();
accessDA.Fill(accessDT);
Qui mergio le 2 tabelle ed in effetti, guardando con il debugger in accessDT ho 3 records:
// Merge DBF table into Access one
accessDT.Merge(dbfDT);
accessDT.AcceptChanges();
Qui dovrei salvare i dati della DataTable che ora contiene 3 records e mi aspetto che in Table2 ci siano 3 records
// Update Access data adapter
int update = accessDA.Update(accessDT);
...invece non succede nulla e la tabella rimane con 1 solo record iniziale...
Ho guardato un bel po' di esempi cercando su google e sembra che faccia in modo corretto...ma secondo voi cosa sbaglio?
Grazie
Cristian