Prelevare ID contatore da inserimento

sabato 28 gennaio 2012 - 19.49
Tag Elenco Tags  C#  |  Windows XP  |  Visual Studio 2008  |  Access (.mdb)

paolo973 Profilo | Senior Member

ho una tabella tra i campi ho un campo contatore che funziona da chiave primaria.
devo inserire un record e subito dopo prendere l'ID del record inserito ed insieme ad altre informazioni inserirlo in un'altra tabella.

come fare?
quando inserisco un record in una tabella come prelevare l'ID che è di tipo contatore, potrebbe non essere l'ultimo inserito.

zseven Profilo | Senior Member

Ciao Paolo973,
io di solito subito dopo l'operazione di inserimento faccio una select con TOP 1 ORDER BY ID DESC.
Se la fai immediatamente dopo la insert dovresti avere la certezza di prendere l'ultimo record inserito. Così non ho mai avuto problemi, ma se sbaglio spero qualcuno possa correggermi e suggerirmi il modo migliore.

Ciao ciao
Guido

andrestu Profilo | Expert

io faccio così, nella stored procedure:

(nella dichiarazione delle variaibli)
@newID int OUTPUT

(subito dopo l'inserimento)
SET @newID = (SELECT @@IDENTITY);

poi da aspnet leggo il valore del parametro 'newID ' impostato come parametro di output, oppure se ti serve direttamente all'interno della SP ancora meglio.
sinceramente non so quale delle due soluzioni è la migliore...

Andrea Restucci - Web Developer

paolo973 Profilo | Senior Member

public string ultimoID(String nameTbl, String dataID)
{
String connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("myDB.mdb");
OleDbConnection cn = new OleDbConnection(connString);
cn.Open();
string sql;
sql = "SELECT TOP 1 myid FROM mytbl ORDER BY myid DESC ";

OleDbCommand cmd = new OleDbCommand(sql, cn);
OleDbDataReader aReader = cmd.ExecuteReader();
aReader.Read();
string value = (string)aReader.GetString(0).ToString();
if (value.Length < 2)
{
value = "";
}
cn.Close();
aReader.Close();
return value;
}

mi ritorna questo errore

System.InvalidCastException: Cast specificato non valido.

in questa riga

string value = (string)aReader.GetString(0).ToString();

myid nel databse è un tipo contatore

andrestu Profilo | Expert

prova a leggerlo come int e non come string

Andrea Restucci - Web Developer
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5