Ado.net

mercoledì 28 maggio 2003 - 16.26

sp Profilo | Newbie

un tempo felice (o infelice) usavo con ASP 3.0 codice tipo:

....
rs.AddNew
rs.Fields("a")="bb"
rs.Fields("b")="cc"
rs.Fields("c")="dd"
rs.update
...

Quale sarebbe l'equivalente di questo codice usando asp.net?
Grazie.
SP

Admin Profilo | Junior Member

ciao,

purtroppo (o per fortuna dipende dai punti di vista) il recorset connesso al db non esiste più in .NET.

Con ADO.NET, tutto è disconnesso.
Quello che puoi fare è quindi "attaccarti" al db tramite un Adapter (come ad. es. SqlDataAdapter), chiamarne il metodo Fill per riempire un dataset... apportare le tue modifiche al dataset, e quindi chiamare il metodo update dell'adapter per trasportare (e quindi rendere persistenti) le modifiche dal dataset al db.

Penso che un buon punto di inizio per capire ciò di cui sto parlando, sia questo:
http://it.gotdotnet.com/QuickStart/howto/default.aspx?url=/quickstart/howto/doc/adoplus/UpdateDataFromDB.aspx

Ciao, alla prossima!

Stefano Giannone

sp Profilo | Newbie

ah, molto interessante! Dalle tue parole e dall'esempio ho scritto questo:

private OleDbConnection conn = new OleDbConnection();
private OleDbDataAdapter da;
private DataTable ds = new DataTable();

conn.ConnectionString = "uso access";
conn.Open();
string SQL = "select * from ...";
da = new OleDbDataAdapter(SQL,conn);
da.Fill(ds);

e fin qui era tutto ok, poi esagero e decido di aggiungere una riga... :-(

DataRow r = ds.NewRow();
r[0] = "mah";
r[1] = "boh";
ds.Rows.Add(r);

// ora la riga che mi da errore...

da.Update(ds);


l'errore:
Update richiede un InsertCommand valido se l'insieme DataRow viene passato con righe nuove.

Grazie Stefano.

Admin Profilo | Junior Member

Ciao,

molto probabilmente hai dimenticato di includere la seguente riga (che però è indicata nell'esempio che ti ho postato):

Dim myDataRowsCommandBuilder as OleDbCommandBuilder = new OleDbCommandBuilder(myOleDbDataAdapter)

In pratica questa istruzione non fa altro che generare automaticamente per conto tuo... tutti i comandi per l'insert, update, delete... che verranno utilizzati all'interno del metodo Update del dataadapter che chiamerai.

Dai un'occhiata anche al sorgente completo dell'esempio:
http://it.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/howto/samples/adoplus/UpdatingData/UpdatingData.src

forse dal sorgente completo si capiscono meglio i vari passaggi.

Ciao!

Stefano Giannone

Isabeau Profilo | Newbie

Sto cercando di fare anch'io la stessa cosa ma da un'errore: Errore di Sintassi nell'istruzione INSERT INTO, nonostante ci sia il command builder...

Grazie ancora!

Admin Profilo | Junior Member

può dipendere dalla tabella... e da come fai la query di select iniziale.
Prova a postarci un pò di codice... così verifichiamo un pò.

Ciao

Stefano Giannone [MCP .NET]

Isabeau Profilo | Newbie

Dopo la connessione questo è il codice che crea la tabella e la riempie:

sql = "SELECT * FROM tab"
AdattaTab = New OleDb.OleDbDataAdapter(sql, objConn)
AdattaTab.MissingSchemaAction = MissingSchemaAction.AddWithKey
Dim CreaComandiTab As New OleDb.OleDbCommandBuilder(AdattaTab)
AdattaTab.Fill(db, "tb")

Context.Cache("db") = db
Context.Cache("AdattaTab") = AdattaTab

in un'altra pagina ....
La variabile 'riga' viene valorizzata...e poi all riga 77 c'è l'errore
Syntax error in INSERT INTO statement.

tbTab.Rows.Add(riga)
Line 76: Dim a As OleDb.OleDbDataAdapter = Context.Cache("AdattaTab")
Line 77: a.Update(dbIns, "tb")

Admin Profilo | Junior Member

va nella guida del .net framework e cerca "Enumerazione MissingSchemaAction"

cerca di capire come funziona... credo che il problema derivi da lì.

Ciao

Stefano Giannone [MCP .NET]

Isabeau Profilo | Newbie

Ciao, credevo di aver risolto il prblema in quanto sul mio pc di casa l'update finalmente funzionava e scriveva i dati nel db...

Ora però ho trasferito il prgetto sul portatile...senza apportare modifiche....e da questo errore:

Per l'operazione è necessaria una query aggiornabile.


Cosa cavolo è successo?
Grazie!

Admin Profilo | Junior Member

non so come aiutarti.
Prova a vedere le differenze di software installato tra le 2 macchine, per quanto riguarda maggiormente il db.

Ciao

Stefano Giannone [MCP .NET]
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5