Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    87

    [Vb 2008] RECUPERO DI ULTERIORI RISULTATI DA UNA QUERY DI INSERT

    Ciao a tutti,
    ho un database MSSQL con 1 tabella SCHEDAT contenente 3 campi:

    Codice(BigInt) contatore
    Nome (char)
    Cognome(char)


    Data una query di insert del tipo:


    DB_TB.Open()
    Command_Save.CommandText = "INSERT INTO SCHEDAT(Nome,Cognome)" + _
    " VALUES ('" & TxT_Nome.Text & "' , '" & Txt_Cognome.Text & "');"
    Command_Save.ExecuteNonQuery()

    DB_TB.Close()

    esiste un modo per conoscere immediatamente alla fine deLla query di insert quale è il valore che assume in campo Codice NEL DB senza fare un'ulteriore query ?

  2. #2

  3. #3

    Re: [Vb 2008] RECUPERO DI ULTERIORI RISULTATI DA UNA QUERY DI INSERT

    Originariamente inviato da anza
    Ciao a tutti,
    ho un database MSSQL con 1 tabella SCHEDAT contenente 3 campi:

    Codice(BigInt) contatore
    Nome (char)
    Cognome(char)


    Data una query di insert del tipo:


    DB_TB.Open()
    Command_Save.CommandText = "INSERT INTO SCHEDAT(Nome,Cognome)" + _
    " VALUES ('" & TxT_Nome.Text & "' , '" & Txt_Cognome.Text & "');"
    Command_Save.ExecuteNonQuery()

    DB_TB.Close()

    esiste un modo per conoscere immediatamente alla fine deLla query di insert quale è il valore che assume in campo Codice NEL DB senza fare un'ulteriore query ?
    potresti crearti una stored procedure che immediatamente dopo la insert
    ti ritorna SCOPE_IDENTITY in un parametro di output.

    Se hai dubbi (ed ovviamente a meno di altri suggerimenti) dovresti per prima cosa
    vederti come funziona la SCOPE_IDENTITY ed affini sulla guida in linea di sqlserver
    e poi guardarti come si fa eseguire una stored procedure con parametri di input/output
    nella sezione relativa ad ADO.NET di MSDN.

    Dopo di che se hai ancora bisogno... a disposizione (tempo permettendo)

    P.S.
    Sia la guida in linea di SqlServer che MSDN sono liberamente consultabili in rete

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    87
    Ringrazio per la dritta e riporto doc trovato in rete, magari in futuro a qualcun altro potrebbe servire:

    Uno dei problemi che più frequentemente mi vengono posti riguarda la possibilità di inserire un nuovo record in una tabella e di conoscere il valore assegnato dal DBMS al campo auto incrementante.

    Questo problema è solitamente risolto, peraltro in modo brillante ed elegante, con una specifica stored procedure (SP) di SQL Server. Qualcuno, però, chiede come si può fare direttamente da codice, senza “scomodare” una stored procedure.

    Ad un primo esame, non abbiamo la possibilità di inserire il record e subito dopo leggere il valore del campo IDENTITY, perché nel frattempo, tra la nostra scrittura del record e la nostra lettura della chiave, qualche altro utente potrebbe aver inserito un nuovo record.

    Queste due operazioni, invece, devono essere fatte in un unico blocco, cioè devono essere eseguite in un’unica transazione (principio di “atomicità” della transazione).

    A questo proposito c’è una particolarità di SQL Server che possiamo utilizzare per risolvere questo problema: in T-SQL possono essere eseguite più istruzioni in sequenza, senza soluzione di continuità, semplicemente separando ciascuna istruzione con un punto e virgola (.

    In questo modo le singole istruzioni saranno eseguite una dopo l’altra senza interrompere la transazione e restituendo, così, il corretto valore della colonna IDENTITY.

    Un esempio di codice di questa tecnica è il seguente:

    Dim cn As System.Data.SqlClient.SqlConnection
    Dim cnStr = "Data Source = HP\SQL2008EXPRESS;" & _
    "Initial Catalog=NOMEDATABASE;" & _
    "Password=PIPPO;" & _
    "User ID=sa;" & _
    "Persist Security Info=True"
    cn = New System.Data.SqlClient.SqlConnection(cnStr)
    cn.Open()
    Dim cmd As New System.Data.SqlClient.SqlCommand( _
    "SET NOCOUNT ON; INSERT INTO Tabella (ANAnome) " & _
    "VALUES ('De Ghetto Mario'); " & _
    "SELECT SCOPE_IDENTITY() AS ANAID;", cn)
    Dim risultato = cmd.ExecuteScalar()
    MessageBox.Show("Il nuovo ID inserito è " & risultato)
    cn.Close()
    cn = Nothing



    PS.
    Gibra secondo me la sezione è giusta

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.