Trovare l'ID appena inserito con OleDbDataAdapter.InsertCommand

martedì 12 luglio 2005 - 21.52

astroman Profilo | Junior Member

Una domanda che penso servirà a moltissime persone, cioè dopo aver inserito una riga su un DB Access, come faccio a sapere l'ID appena inserito per poterlo utilizzare, per esempio, per inserirlo in un'altra query?
Ne avrei bisogno abbastanza urgentemente e chi può darmi una soluzione pratica ed efficace...beh gli sarei enormente grato!:D

Partiamo da questo codice d'esempio:

OleDbConnection con = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter da = new OleDbDataAdapter();
con.ConnectionString=<connessione>;
con.Open();

da.InsertCommand=cmd;
da.InsertCommand.CommandText="INSERT INTO TBL (CAMPO) VALUES (?)";
da.InsertCommand.Parameters.Add("CAMPO",Valore);
da.InsertCommand.Connection=con;
da.InsertCommand.ExecuteNonQuery();

e adesso?Come faccio a sapere l'id che ho appena inserito (è un campo Contatore di Access)

totti240282 Profilo | Guru

c'era una discussione un po di giorni fa su questo,si usava una query particolare o tramite l'uso delle storedprocedure.
se vuoi quello delle storeprocedure fai un fischio.

C'è solo un capitano !!!!!!

astroman Profilo | Junior Member

No, grazie...lo so anche io come si fanno le storeprocedures...solo che, come indicato, devo utilizzare un DB Access...

Beh mi rispondo da solo...ho appena trovato questo magnifico codice d'esempio che penso che sarà veramente moooooolto utile a molti di noi (chissà, non è che sarebbe utile scriverci sopra un articolo?!?)...cmq eccolo qui...

string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db.mdb";

string strSQL = "INSERT INTO tblStudent (Name,Address) VALUES(?,?)";

OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();


OleDbCommand cmd = new OleDbCommand();

cmd = new OleDbCommand(strSQL,conn );

cmd.Parameters.Add("@Name", OleDbType.Char, 50).Value = txtName.Text;
cmd.Parameters.Add("@Address", OleDbType.Char, 50).Value = txtAddress.Text;
cmd.ExecuteNonQuery();

cmd = new OleDbCommand("SELECT @@IDENTITY", conn);

int nId = (int)cmd.ExecuteScalar();


strSQL = "INSERT INTO tblScore (StudentId, Score) VALUES (?,?)";

cmd.CommandText = strSQL;
cmd.Parameters.Add("@StudentId", OleDbType.Integer).Value = nId;

cmd.Parameters.Add("@Score", OleDbType.Integer).Value = Int32.Parse(txtScore.Text);
cmd.ExecuteNonQuery();

Provato e....funziona!:D

Cteniza Profilo | Guru

Se hai bisogno di recuperare l'id durante l "update" del dataset ?.
C'è il mio blog che ti spiega come fare:
Access Recuperare nel DataSet la Chiave autonumber generata dal database
http://community.visual-basic.it/lucianob/archive/2005/01/07/3062.aspx

astroman Profilo | Junior Member

Beh concettualmente mi sembra uguale...anche se il codice espresso nell'esempio che ho riportato accorcia notevolmente la scrittura del codice, è più diretto e non serve aprire tanti oggetti, sbaglio?

Cteniza Profilo | Guru

Non si tratta della stessa cosa!.
Solo il comando "SELECT" che recupera il dato è uguale, ovviamente, il resto cambia soprattutto nel contesto.
Nel tuo esempio fai l'inserimento tramite un execute command e poi recuperi l'ultimo id inserito.
Il mio invece presuppone che tu gestisca il binding con gli oggetti nella maschera e che pertanto tu abbia aperto un dataset e che utilizzi il comando:
DataAdapter.Update(dataset).




astroman Profilo | Junior Member

Ah ok, hai ragione...ma penso che stiamo parlando di due situazioni diverse.In ogni caso è molto utile anche il tuo...il mio diciamo che serve più per eseguire delle query "veloci" di inserimento/cancellazione/modifica...beh almeno io in tanti anni di programmazione ne ho fatto tantissimo uso

alba Profilo | Newbie

scusate se riapro la discussione, ma....

ho provato il codice e funziona, ma come possiamo sapere che l'id recuperato e' effettivamente l'id inserito da un INSERT INTO che ho fatto io anziche' l'id di un altro utente che stava facendo anche lui la stessa operazione?

spero di essere stato chiaro.....
grazie
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5