Query inserimento in tabella SQL con campo identity, come conoscere ?

di il
2 risposte

Query inserimento in tabella SQL con campo identity, come conoscere ?

Buongiorno a tutto il forum.

Devo inserire una foto, in un campo di tabella SQL Server.

Questa tabella ha un campo Identity autoincrementale, di devo conoscere il valore, per "lincare" il record ad un'altra tabella.

Uso questo codice, ma non so come recuperare il valore del campo "idValue".

    Dim cnFoto As ADODB.Connection
    Dim cmdFoto As ADODB.Command
    Dim streamFoto As ADODB.Stream
    Dim iFreFile As Integer
    Dim sAxisFileName As String


    iFreFile = FreeFile
    sAxisFileName = "C:\Park\Temp.jpg" 'immagine di test
    Dim bytdata() As Byte
    Open sAxisFileName For Binary As #iFreFile
    ReDim bytdata(FileLen(sAxisFileName))
    Get #iFreFile, , bytdata
    Close #iFreFile
    Set streamFoto = New ADODB.Stream
    streamFoto.Type = adTypeBinary
    streamFoto.Open
    streamFoto.LoadFromFile sAxisFileName

    Set cnFoto = New ADODB.Connection
    cnFoto.ConnectionString = Set_Up(STRINGA_CONNESSIONE)
    cnFoto.Open
    
    Set cmdFoto = New ADODB.Command
    With cmdFoto
        .ActiveConnection = cnFoto
        .CommandType = adCmdText
        .CommandText = "INSERT INTO Tab_Foto (ImgPesata) VALUES(?) SELECT SCOPE_IDENTITY() as idValue"
        .Parameters.Append cmdFoto.CreateParameter("@image", adBinary, adParamInput, streamFoto.Size, streamFoto.Read)
        .Execute
    End With

La query viene eseguita correttamente e l'immagine memorizzata in tabella.

la SELECT SCOPE_IDENTITY() la uso normalmente in VB.NET, ma in VB6 è la prima volta che cerco di usarla

Grazie a chi riesce a darmi una dritta.

Daniele G

2 Risposte

  • Re: Query inserimento in tabella SQL con campo identity, come conoscere ?

    Ciao e buona Pasqua... 

    fai una cosa, usa un recordset per ricevere subito il valore del nuovo id inserito.

    Con .Execute esegui solo l'inserimento del new record ma  può restituire un recordset con il records che è stato inserito.

    A questo punto leggi il recordset per reperire il valore del nuovo Id record inserito.

    Dim cnFoto As ADODB.Connection
    Dim cmdFoto As ADODB.Command
    Dim streamFoto As ADODB.Stream
    Dim iFreFile As Integer
    Dim sAxisFileName As String
    
    iFreFile = FreeFile
    sAxisFileName = "C:\Park\Temp.jpg" ' immagine di test
    
    Dim bytdata() As Byte
    Open sAxisFileName For Binary As #iFreFile
    ReDim bytdata(FileLen(sAxisFileName))
    Get #iFreFile, , bytdata
    Close #iFreFile
    
    Set streamFoto = New ADODB.Stream
    streamFoto.Type = adTypeBinary
    streamFoto.Open
    streamFoto.LoadFromFile sAxisFileName
    
    Set cnFoto = New ADODB.Connection
    cnFoto.ConnectionString = Set_Up(STRINGA_CONNESSIONE)
    cnFoto.Open
    
    ' Set recordset
    Dim rsID As ADODB.Recordset
    Dim idValue As Long
    
    Set cmdFoto = New ADODB.Command
    With cmdFoto
        .ActiveConnection = cnFoto
        .CommandType = adCmdText
        .CommandText = "INSERT INTO Tab_Foto (ImgPesata) OUTPUT INSERTED.ID VALUES (?)"
        .Parameters.Append .CreateParameter("@image", adBinary, adParamInput, streamFoto.Size, streamFoto.Read)
    	Set rsID = .Execute
    End With
    
    ' Retrieve new record id
    If Not rsID Is Nothing And Not rsID.EOF Then idValue = rsID.Fields(0).Value
    
    ' Close
    rsID.Close
    Set rsID = Nothing
    Set streamFoto = Nothing
    Set cmdFoto = Nothing
    Set cnFoto = Nothing

    In INSERTED.ID sostituire ID con il nome della colonna ID della tua tabella e in idValue si ottiene il valore del nuovo ID inserito.

  • Re: Query inserimento in tabella SQL con campo identity, come conoscere ?

    Ciao,

    grazie 1000 per l'aiuto.

    Funziona perfettamente, (non sapevo che il command.execute potesse ritornare un recordset).

    Auguri di buona Pasqua anche a te !

    Daniele G.

Devi accedere o registrarti per scrivere nel forum
2 risposte