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

    [VB.NET] Recuperare valore SELECT da stored procedure di inserimento

    ciao!

    ho una SP con la quale inserisco i dati in una tabella.
    la parte "centrale" è questa:
    codice:
        BEGIN TRY
            INSERT INTO [dbo].[Richieste] (
                [RicReferente]
                ,[RicIntervento]
                ,[RicCondominio]
                ,[RicDataInizio]
                ,[RicDataUltimo]
                )
            VALUES (
                @RicReferente
                ,@RicIntervento
                ,@RicCondominio
                ,@RicDataInizio
                ,@RicDataUltimo
                );
    
            SELECT @RecordID = @@IDENTITY
        END TRY
    da VB.NET come faccio a recuperare quella SELECT??
    ho provato così ma mi da sempre zero:
    codice:
    Protected Sub btnInviaRichiesta_Click(sender As Object, e As EventArgs) Handles btnInviaRichiesta.Click
            oConn.Open()
            Dim cmd As SqlCommand = New SqlCommand("[usp_InsertRichiesta]", oConn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Clear()
            cmd.Parameters.AddWithValue("@RicReferente", uid)
            cmd.Parameters.AddWithValue("@RicIntervento", drpDestin.SelectedValue)
            cmd.Parameters.AddWithValue("@RicCondominio", drpCond.SelectedValue)
            cmd.Parameters.Add("@RecordID", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
            cmd.ExecuteNonQuery()
            oConn.Close()
            Diagnostics.Debug.WriteLine(cmd.Parameters("@RecordID").Value)
        End Sub
    ovviamente i record sono inseriti correttamente.

  2. #2
    ExecuteNonQuery non riporta valori https://docs.microsoft.com/en-us/dot...xecuteNonQuery

    però --> Although the ExecuteNonQuery returns no rows, any output parameters or return values mapped to parameters are populated with data.

  3. #3
    ciao optime.

    ok capito.
    ma cmq non saprei come risolvere il problema.

    io dovrei recuperare l'ultimo IDENTITY inserito in tabella.
    sbaglio nel codice VB o nella SP?

    ho provato anche usando ExecuteReader, ma con lo stesso risultato.
    Ultima modifica di fermat; 16-09-2019 a 12:28

  4. #4
    CREATE PROCEDURE [dbo].[usp_pippo]


    (
    @parm1 Varchar(16),
    @...
    @parmN int,
    @IDNew float = 0 OUTPUT
    )


    AS


    INSERT INTO
    ....

    SELECT @IDNew = SCOPE_IDENTITY()

  5. #5
    ciao!

    ho fatto la modifica alla SP:
    codice:
    ALTER PROCEDURE [dbo].[usp_InsertRichiesta] 
        @RicReferente INT
        ,@RicIntervento INT
        ,@RicCondominio INT
        ,@RicDataInizio DATETIME = NULL
        ,@RicDataUltimo DATETIME = NULL
        ,@RecordID AS INT = 0 OUTPUT
        ,@IDLast float = 0 OUTPUT
        ,@ERROR_NUMBER AS INT = 0 OUTPUT
        ,@ERROR_SEVERITY AS INT = 0 OUTPUT
        ,@ERROR_STATE AS INT = 0 OUTPUT
        ,@ERROR_PROCEDURE AS NVARCHAR(126) = '' OUTPUT
        ,@ERROR_LINE AS INT = 0 OUTPUT
        ,@ERROR_MESSAGE AS NVARCHAR(4000) = '' OUTPUT
        ,@NUMROWSAFFECTED AS INT = NULL OUTPUT
    AS
    BEGIN
        IF @RicDataInizio IS NULL
        BEGIN
            SET @RicDataInizio = GETDATE();
            SET @RicDataUltimo = GETDATE();
        END;
    
        SET NOCOUNT ON;
    
        BEGIN TRY
            INSERT INTO [dbo].[Richieste] (
                [RicReferente]
                ,[RicIntervento]
                ,[RicCondominio]
                ,[RicDataInizio]
                ,[RicDataUltimo]
                )
            VALUES (
                @RicReferente
                ,@RicIntervento
                ,@RicCondominio
                ,@RicDataInizio
                ,@RicDataUltimo
                );
    
            --SELECT @RecordID = @@IDENTITY
            SELECT @IDLast = SCOPE_IDENTITY()
        END TRY
    
        BEGIN CATCH
            PRINT 'CATCH:' + ERROR_MESSAGE()
    
            IF @@TRANCOUNT > 0
                ROLLBACK TRANSACTION;
    
            SELECT @ERROR_NUMBER = ERROR_NUMBER()
                ,@ERROR_SEVERITY = ERROR_SEVERITY()
                ,@ERROR_STATE = ERROR_STATE()
                ,@ERROR_PROCEDURE = ERROR_PROCEDURE()
                ,@ERROR_LINE = ERROR_LINE()
                ,@ERROR_MESSAGE = ERROR_MESSAGE()
        END CATCH;
    END
    però non ho capito cmq il codice VB come dovrei modificarlo.
    ho fatto vari tentativi rilegendomi anche la pagina che mi hai mandato.
    mi sembra che ExecuteNonQuery dovrebbe andare, ma vedo sempre 0:
    codice:
        Protected Sub btnInviaRichiesta_Click(sender As Object, e As EventArgs) Handles btnInviaRichiesta.Click
            oConn.Open()
            Dim cmd As SqlCommand = New SqlCommand("[usp_InsertRichiesta]", oConn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Clear()
            cmd.Parameters.AddWithValue("@RicReferente", uid)
            cmd.Parameters.AddWithValue("@RicIntervento", drpDestin.SelectedValue)
            cmd.Parameters.AddWithValue("@RicCondominio", drpCond.SelectedValue)
            cmd.Parameters.Add("@IDLast", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
            cmd.ExecuteNonQuery()
            'Diagnostics.Debug.WriteLine(cmd.Parameters("@IDLast").Value)
            btnInviaRichiesta.Text = cmd.Parameters("@IDLast").Value
            oConn.Close()
        End Sub

  6. #6
    Domanda scema di rito: la tabella richieste ha una colonna di tipo identity?

  7. #7
    Quote Originariamente inviata da optime Visualizza il messaggio
    Domanda scema di rito: la tabella richieste ha una colonna di tipo identity?
    si si chiama RicId.
    è impostata come identity e primary key.

  8. #8
    ho visto che nella SP rimandi indietro diversi valori: sono sempre tutti a zero?

  9. #9
    Quote Originariamente inviata da optime Visualizza il messaggio
    ho visto che nella SP rimandi indietro diversi valori: sono sempre tutti a zero?
    nel frattempo mi si è rotto l'hard disk, e quindi non posso fare altri tentativi fino a che non rimetto tutto su.

    cmq lanciando la SP dall'SQL Management, sugli altri valori ottenevo NULL.
    in sostanza, zero errori, e il record inserito correttamente.

  10. #10
    eccomi, allora ho eseguito la SP da SSMS.
    questo il codice eseguito in automatico:
    codice:
    USE [db_zara_test]
    GO
    
    DECLARE    @return_value int,
            @IDLast float,
            @ERROR_NUMBER int,
            @ERROR_SEVERITY int,
            @ERROR_STATE int,
            @ERROR_PROCEDURE nvarchar(126),
            @ERROR_LINE int,
            @ERROR_MESSAGE nvarchar(4000),
            @NUMROWSAFFECTED int
    
    EXEC    @return_value = [dbo].[usp_InsertRichiesta]
            @RicReferente = 1,
            @RicIntervento = 1,
            @RicCondominio = 1,
            @RicDataInizio = NULL,
            @RicDataUltimo = NULL,
            @IDLast = @IDLast OUTPUT,
            @ERROR_NUMBER = @ERROR_NUMBER OUTPUT,
            @ERROR_SEVERITY = @ERROR_SEVERITY OUTPUT,
            @ERROR_STATE = @ERROR_STATE OUTPUT,
            @ERROR_PROCEDURE = @ERROR_PROCEDURE OUTPUT,
            @ERROR_LINE = @ERROR_LINE OUTPUT,
            @ERROR_MESSAGE = @ERROR_MESSAGE OUTPUT,
            @NUMROWSAFFECTED = @NUMROWSAFFECTED OUTPUT
    
    SELECT    @IDLast as N'@IDLast',
            @ERROR_NUMBER as N'@ERROR_NUMBER',
            @ERROR_SEVERITY as N'@ERROR_SEVERITY',
            @ERROR_STATE as N'@ERROR_STATE',
            @ERROR_PROCEDURE as N'@ERROR_PROCEDURE',
            @ERROR_LINE as N'@ERROR_LINE',
            @ERROR_MESSAGE as N'@ERROR_MESSAGE',
            @NUMROWSAFFECTED as N'@NUMROWSAFFECTED'
    
    SELECT    'Return Value' = @return_value
    
    GO
    e questo è l'output:
    codice:
    @IDLast    @ERROR_NUMBER    @ERROR_SEVERITY    @ERROR_STATE    @ERROR_PROCEDURE    @ERROR_LINE    @ERROR_MESSAGE    @NUMROWSAFFECTED
    13    NULL    NULL    NULL    NULL    NULL    NULL    NULL
    e sotto mi esce questo:
    codice:
    Return Value
    0
    quindi in effetti ritorna zero.
    il perchè non l'ho capito.

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 © 2019 vBulletin Solutions, Inc. All rights reserved.