Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C#/Access] Ottenere ID della Insert

    Ciao,

    Sto utilizzando C# ed un database access:


    query = "INSERT INTO...";

    oleCmd = new OleDbCommand(query, conn);

    oleCmd.ExecuteNonQuery();

    Una volta effettuato questo comando c'è il modo di ottenere l'ID della chiave primaria (autoincrement) di questa insert?

    Senza dover effettuare una query e dover ricercare l'ID più alto....


    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Utilizziamolo sto supporto Microsoft ...

    http://support.microsoft.com/kb/815629/en-us

  3. #3
    Utilizzando SELECT @@Identity devo comunque eseguire un'altra select, io stavo cercando qualcosa di simile ad una funzione di php, che bastava richiamarla per avere l'ID....

    In access non trovo niente di simile...


    Un'altro dubbio che mi porto dietro da tempo:

    query = "SELECT TOP 1 id FROM tabellaORDER BY id DESC;

    oleCmd = new OleDbCommand(query, conn);

    long art = System.Convert.ToInt64(oleCmd.ExecuteScalar());


    Oppure utilizzare la store procedure, è la stessa cosa, oppure ci sono delle differenze?


    Grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da SkOrPiOn`87
    Utilizzando SELECT @@Identity devo comunque eseguire un'altra select, io stavo cercando qualcosa di simile ad una funzione di php, che bastava richiamarla per avere l'ID....

    In access non trovo niente di simile...
    Non c'e' ...

    Un'altro dubbio che mi porto dietro da tempo:

    query = "SELECT TOP 1 id FROM tabellaORDER BY id DESC;

    oleCmd = new OleDbCommand(query, conn);

    long art = System.Convert.ToInt64(oleCmd.ExecuteScalar());


    Oppure utilizzare la store procedure, è la stessa cosa, oppure ci sono delle differenze?


    Grazie
    Le stored procedure sono "precompilate" dal DBMS e quindi sono piu' veloci delle query ...

    In ogni caso, la SELECT TOP 1 deve essere fatta in una transazione, altrimenti, in un ambiente multiuser, rischi che venga eseguita tra la tua INSERT e quella di un altro utente ...

  5. #5
    codice:
    SqlTransaction trans;
    trans = conn.BeginTransaction(IsolationLevel.Serializable);
    
    
    string query = "SELECT TOP 1 id FROM tabellaORDER BY id DESC;
    
    oleCmd = new OleDbCommand(query, conn);
    oleCmd.Transaction = trans;
    long art = System.Convert.ToInt64(oleCmd.ExecuteScalar());
    
    
    query = "INSERT INTO tabella (id) VALUES (" + art + ");
    
    oleCmd = new OleDbCommand(query, conn);
    oleCmd.Transaction = trans;
    oleCmd.ExcuteNonQuery();
    
    Query = "....."...
    ....
    ...
    ..
    Va bene questo codice, oppure il livello di isolazione è troppo alto?

  6. #6
    :quote:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.