Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Recuperare l'ID dell'ultimo record inserito senza usare SP
mercoledì 02 maggio 2007 - 09.19
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
tetacom
Profilo
| Newbie
17
messaggi | Data Invio:
mer 2 mag 2007 - 09:19
Salve a tutti,
ho un quesito da porre in merito all'argomento in oggetto.
Ho la mia brava tabella in sql server 2005 con un campo identità che fa da chiave primaria. (e fin qui non ci nevica)
Sto creando un'applicazione winform con vbasic ed utilizzo, as usual, i 2 oggetti che mi crea la procedura guidata:
- DataSet
- TableAdapter
E fin qui neanche ci nevica. Io ho intenzione di aggiungere un nuovo record nella tabella utilizzando il metodo Insert esposto dall'oggetto TableAdapter e voglio recuperare immediatamente l'ID automatico che gli è stato assegnato dal mio bravo SQL Server.
Ho letto che si può fare con le stored procedure, ma ho la stessa esigenza per una quarantina di tabelle e sinceramente non mi va di scrivere 40 stored procedure. Nella configurazione guidata del TableAdapter c'è una casella di spunta "Aggiorna la tabella dati" nella schermata "Opzioni Avanzate": quello che mi chiedo io è:
POSSO UTILIZZARE QUESTA PROCEDURA AUTOMATICA E VELOCE PER RAGGIUNGERE IL MIO OBIETTIVO SENZA SCRIVERE UNA STORED PROCEDURE?
oppure
SAPETE SUGGERIRMI UN METODO VELOCE?
Grazie anticipatamente!
TetaCom
Ci sono 10 categorie di persone: chi comprende il sistema binario e chi non lo comprende.
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 2 mag 2007 - 13:24
>Ho letto che si può fare con le stored procedure, ma ho la stessa
>esigenza per una quarantina di tabelle e sinceramente non mi
>va di scrivere 40 stored procedure. Nella configurazione guidata
>del TableAdapter c'è una casella di spunta "Aggiorna la tabella
>dati" nella schermata "Opzioni Avanzate": quello che mi chiedo
Prova a leggerti questo Post, forse è ciò che serve a te.
Fammi sapere.
Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
tetacom
Profilo
| Newbie
17
messaggi | Data Invio:
gio 3 mag 2007 - 07:31
Scusa David,
ma a quale post ti riferisci?
TetaCom
Ci sono 10 categorie di persone: chi comprende il sistema binario e chi non lo comprende.
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 3 mag 2007 - 08:25
>Scusa David,
>ma a quale post ti riferisci?
Porca miseria, mi è rimasto nella clipboard il link. Eccolo:
http://blogs.msdn.com/smartclientdata/archive/2005/10/31/ReturnIdentityValueQuery.aspx
Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
gio 3 mag 2007 - 21:52
>Porca miseria, mi è rimasto nella clipboard il link. Eccolo:
>
http://blogs.msdn.com/smartclientdata/archive/2005/10/31/ReturnIdentityValueQuery.aspx
Il tuo amico dev ha commesso una leggerezza
Se sulla tabella dbo.Orders è definito un trigger che esegue una insert in un'altra tabella che possiede una colonna IDENTITY, il risultato che otterrà sarà il valore generato per la seconda dabella dato che lo scope della funzione @@IDENTITY è a livello di sessione.
La soluzione consiste nell'utilizzare la funzione SCOPE_IDENTITY() che invece ha uno scope a livello di procedura corrente.
I Books Online sono chiarissimi in merito alle funzioni @@IDENTITY, SCOPE_IDENTITY() e IDENT_CURRENT():
"@@IDENTITY (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms187342.aspx
"SCOPE_IDENTITY (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms190315.aspx
"IDENT_CURRENT (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms175098.aspx
Ah, dimenticavo, è una PESSIMA IDEA accedere direttamente ad un oggetto di un db senza passare da un layer costituito da stored procedure, UDF e viste, per motivi di SICUREZZA, prestazioni ed astrazione dallo schema del db.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
tetacom
Profilo
| Newbie
17
messaggi | Data Invio:
gio 3 mag 2007 - 23:05
Ragazzi siete stati fantastici, ho tanto materiale da leggere e studiare. Mi avete dato ottimi spunti da approfondire: GRAZIE!!!
Ritornando al problema: l'ho risolto e adesso vi dico come:
- apro la finestra di progettazione del dataset generato automaticamente dal VStudio
- ogni table ha il suo TableAdapter
- clicco col destro sul TableAdapter e seleziono Aggiungi Query
- parte la Configurazione Guidata Query
- seleziono Crea Nuova Stored Procedure
- come per magia mi porta alla creazione di una Stored Procedure di tipo Insert alla quale ci posso aggiungere @@IDENTITY oppure SCOPE_IDENTITY(), modificando un pochino quello che mi passa la creazione guidata.
Comunque un'operazione meccanica che per 40 tabelle non mi porterà via un'eternità di tempo.
Ho provato con @@IDENTITY e con SCOPE_IDENTITY(): funziona in tutti e due i casi restituendo l'ID dell'ultimo record inserito.
Lorenzo in questo modo ho risolto i problemi di sicurezza, prestazioni ed astrazione a cui ti riferivi?
TetaCom
Ci sono 10 categorie di persone: chi comprende il sistema binario e chi non lo comprende.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
gio 3 mag 2007 - 23:11
>Ho provato con @@IDENTITY e con SCOPE_IDENTITY(): funziona in
>tutti e due i casi restituendo l'ID dell'ultimo record inserito.
Peché la tua tabella non ha un trigger di insert che esegue a sua volta una INSERT su una seconda tabella avente una colonna IDENTITY
>Lorenzo in questo modo ho risolto i problemi di sicurezza, prestazioni
>ed astrazione a cui ti riferivi?
Io mi limito a dire che un accesso corretto comporta la definizione di un layer costituito dagli oggetti che ho menzionato nel precedente post.
Tanto per avere un assaggio dei vantaggi che comportano le stored procedure, leggi i seguenti post:
http://tinyurl.com/s662
http://tinyurl.com/s664
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
tetacom
Profilo
| Newbie
17
messaggi | Data Invio:
gio 3 mag 2007 - 23:24
OK Lorenzo, ci darò un'attenta lettura. Sto migrando da access a sql server e mi ritrovo a gestire gli stessi dati di prima, ma con un metodo differente. Per adesso mi trovo abbastanza a mio agio con sql server, ma ho ancora tanto da imparare sia in teoria che sul campo pratico. Vi ringrazio e se ho altri problemi aprirò altri post! :D
TetaCom
Ci sono 10 categorie di persone: chi comprende il sistema binario e chi non lo comprende.
Torna su
Stanze Forum
Elenco Threads
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 !