Newsgroup: it.arti.musica.strumenti.chitarra
Titolo: [OT] Dataset ADO.NET in C#

Scusate l'OT terrificante, ma non so più dove sbattere la testa.
Programmatori di C# a me (lo so che ci siete) :)
Sto sviluppando un banalissimo client C# stand-alone che utilizza un db
Access in locale [non fate domande su specifiche ed architettura, io non
c'entro :) ].
Sto impazzendo con DataSet, DataAdapter e DataMinchie varie.
Devo semplicemente popolare una tabella, il problema è che le modifiche
apportate al DataSet non vengono scritte sul db.
Creo una DataRow "row", popolo i campi, aggiungo la riga alla tabella del
DataSet:
            ds.Tables[table].Rows.Add(row);
            row.AcceptChanges();
            ds.Tables[table].AcceptChanges();
            ds.AcceptChanges();
            adapter.Update(ds, table);
 
..e sul db non mi scrive nulla.
E' sicuramente qualche minchiata, lo so.
Manca qualcosa? Access non supporta tutto ciò? Ho cercato in rete, gli
esempi mi sembrano tutti in linea con quanto faccio io, ma non funzica.
Suggerimenti?
Grazie infinite e scusate ancora per l'OT.
-- 
Erik
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie infinite e scusate ancora per l'OT.
ad occhio dovrebbe mancare la parte che permette all'adapter di crearsi le
istruzioni di insert/update/delete, fornita gentilmente
dall'oledbcommandbuilder.
io uso questa funzione (o meglio: usavo la versione vb di questa funzione
che ho tradotto in c# con un sito apposito)
public bool updateCommand(ref DataTable dt, string _table) {
        DataSet dsDataset = dt.DataSet;
        OleDb.OleDbDataAdapter myDataAdapter = new
OleDb.OleDbDataAdapter();
        dt.TableName = _table;
        OpenDBOleConnection();
        myDataAdapter.SelectCommand = new OleDb.OleDbCommand(("Select *
from " + _table), OleDBConnection);
        OleDb.OleDbCommandBuilder custCB = new
OleDb.OleDbCommandBuilder(myDataAdapter);
        myDataAdapter.InsertCommand = custCB.GetInsertCommand();
        myDataAdapter.UpdateCommand = custCB.GetUpdateCommand();
        myDataAdapter.DeleteCommand = custCB.GetDeleteCommand();
        try {
            myDataAdapter.Update(dt);
            updateCommand = true;
            CloseDBOleConnection();
        }
        catch (Exception ex) {
            updateCommand = false;
        }
        myDataAdapter.Dispose();
        custCB.Dispose();
    }
passale il datatable ds.Tables[table] e il nome tabella table (oppure
direttamente il dataset ricavando da esso i dati che ti servono... io ci
lavoravo sopra solo con le datatable)
spero di essere stato di aiuto
C.
-- 


Grazie per la risposta.
Avevo già messo la parte relativa all'OledbCommandBuilder, ma non c'è
verso di far scrivere una sola riga sulla tabella (mentre con
ExecuteNonQuery funziona, ma l'utente ci diventa vecchio).
Ti posso scrivere in privato? La mail è valida?
Grazie, ciao
Erik
-- 
Erik


Finalmente ho risolto...
Alla fine c'era una maledetta tabella in cui alcuni campi si chiamano come
alcune parole riservate di Access.
Ho risolto utilizzando 
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
dato che in Access i campi che si chiamano come le parole chiave vanno
appunto racchiusi fra [], ad esempio [text].
Grazie per il supporto, ciao
Erik
-- 
Erik


 Erik
grazie anche a te, la faccenda delle quadre potrebbe tornarmi utile a
breve...
C.
-- 


 C.
Figurati :)
Tra l'altro c'ero già capitato con questo problema, solo che quando
costruisci le query "a mano" è tutto più semplice :)
Tanto che ci siamo... secondo te qual è il miglior modo per gestire un
import da file di testo (flat files) abbastanza grossi (alcuni hanno anche
300.000 righe)?
Con tante "INSERT INTO" tramite ExecuteNonQuery c'è da spararsi nella
palle, ora con l'utilizzo di un DataSet è molto meglio (però circa 260.000
righe siamo ancora nell'ordine dei 10 minuti, mi sembra troppo, ma per ora
ho fatto solo una prova per verificare che funzionasse il meccanismo)...
Altre soluzioni da suggerire? :)
Grazie, ciao
-- 
Erik
