Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [T-SQL] Modifica SP

  1. #1
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    [T-SQL] Modifica SP

    codice:
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    
    
    
    ALTER PROCEDURE [dbo].[SP_LOGIN]
    (
     @USERID Varchar(20),
     @PASSWORD Varchar(6)
    )
    AS
    IF EXISTS
    (
      SELECT * FROM TBLOCALI WHERE userid = @USERID AND pwd = @PASSWORD
    )
     RETURN 0
    ELSE
     RETURN 1
    come faccio a modificare questa per farmi tornare l'ID (Primary Key) ?

  2. #2
    Utente di HTML.it L'avatar di geko
    Registrato dal
    Dec 2004
    Messaggi
    104
    codice:
    ALTER PROCEDURE [dbo].[SP_LOGIN]
    (
     @USERID Varchar(20),
     @PASSWORD Varchar(6)
    )
    AS
    
    DECLARE @id INT
    
    SELECT @id = id 
    FROM TBLOCALI 
    WHERE userid = @USERID 
    AND pwd = @PASSWORD
    
    IF @id IS NULL SET @id = -1
    
    RETURN @id
    Ti restituisce -1 se non trova nulla.


  3. #3
    Utente di HTML.it L'avatar di geko
    Registrato dal
    Dec 2004
    Messaggi
    104
    ...oppure

    codice:
    ALTER PROCEDURE [dbo].[SP_LOGIN]
    (
     @USERID Varchar(20),
     @PASSWORD Varchar(6), 
     @id INT OUTPUT
    )
    AS
    
    SELECT @id = id 
    FROM TBLOCALI 
    WHERE userid = @USERID 
    AND pwd = @PASSWORD
    
    IF @id IS NULL SET @id = -1

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    codice:
    ALTER PROCEDURE [dbo].[SP_LOGIN_ID]
    (
     @USERID Varchar(20),
     @PASSWORD Varchar(6), 
     @ID INT OUTPUT
    )
    AS
    
    SELECT @ID = ID FROM TBLOCALI WHERE userid = @USERID AND pwd = @PASSWORD
    IF @ID IS NULL SET @ID = -1
    
    RETURN @id
    mi dice che la SP si aspetta un @ID che non fornisco

    questo e' il codice che uso per connettermi alla SP:
    codice:
            Dim conn As New SqlConnection(stringaconnessione)
            Dim cmdLogin As SqlCommand
            Dim parValoreRitorno As SqlParameter
    
            ' Preparo il command con la Stored Procedure
            cmdLogin = New SqlCommand("SP_LOGIN_ID", conn)
            cmdLogin.CommandType = CommandType.StoredProcedure
    
            ' Definisco il valore di ritorno
            parValoreRitorno = cmdLogin.Parameters.Add("intID", SqlDbType.Int)
            parValoreRitorno.Direction = ParameterDirection.ReturnValue
    
            ' Aggiungo i parametri di input
            cmdLogin.Parameters.Add("@USERID", SqlDbType.VarChar).Value = Nomeutente
            cmdLogin.Parameters.Add("@PASSWORD", SqlDbType.VarChar).Value = Password
    
            ' Eseguo
            Try
                conn.Open()
                cmdLogin.ExecuteNonQuery()
    
                If cmdLogin.Parameters("intID").Value <> -1 Then
                    Return cmdLogin.Parameters("intID").Value
                Else
                    Throw New System.data.DataException("Errore ADO.Net")
                    Return -1
                End If
            Catch ex As System.data.DataException
                HttpContext.Current.Response.Write("<font color=red>WARNING:</font>" & ex.Message)
                Return -1
            Catch ex As Exception
                HttpContext.Current.Response.Write("<font color=red>WARNING:</font>" & ex.StackTrace)
                Return -1
            Finally
                conn.Close()
                cmdLogin.Dispose()
            End Try

  5. #5
    Utente di HTML.it L'avatar di geko
    Registrato dal
    Dec 2004
    Messaggi
    104
    no no.. aspetta..

    le due SP che ho scritto vanno utilizzate in modo diverso. La prima usa un valore di ritorno, la seconda un parametro di output; questione di gusti, magari usa la seconda, così se per caso un giorno volessi restituire un dato di tipo CHAR puoi farlo (i valori di ritorno possono essere solo INT).

    detto questo, nella SP non devi utilizzare RETURN.

    Il tuo codice

    codice:
    parValoreRitorno = cmdLogin.Parameters.Add("intID", SqlDbType.Int)
    parValoreRitorno.Direction = ParameterDirection.ReturnValue
    diventa

    codice:
    cmdLogin.Parameters.Add("ID" , SqlDbType.Int)
    magari imposta anche il fatto che è di OUTPUT, e per leggerlo

    codice:
    If cmdLogin.Parameters("intID").Value <> -1 Then

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    imposta anche il fatto che è di OUTPUT

    come ? non basta questa ?

    @id INT OUTPUT


    forse cosi?
    cmdLogin.Parameters("id").Direction = ParameterDirection.Output
    grazie 1000

  7. #7
    Utente di HTML.it L'avatar di geko
    Registrato dal
    Dec 2004
    Messaggi
    104
    intendevo l'attributo Direction nel codice C#

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    si ho modificato il messaggio...ora provo

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    con questa SP...
    codice:
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    
    ALTER PROCEDURE [dbo].[SP_LOGIN_ID]
    (
     @USERID Varchar(20),
     @PASSWORD Varchar(6), 
     @id INT OUTPUT
    )
    AS
    
    SELECT @id = id 
    FROM TBLOCALI 
    WHERE userid = @USERID 
    AND pwd = @PASSWORD
    
    IF @id IS NULL SET @id = -1
    ...e con questo codice (VB)
    codice:
            Dim conn As New SqlConnection(stringaconnessione)
            Dim cmdLogin As SqlCommand
    
            ' Preparo il command con la Stored Procedure
            cmdLogin = New SqlCommand("SP_LOGIN_ID", conn)
            cmdLogin.CommandType = CommandType.StoredProcedure
    
            ' Definisco il valore di ritorno
            cmdLogin.Parameters.Add("id", SqlDbType.Int)
            cmdLogin.Parameters("id").Direction = ParameterDirection.Output
    
            ' Aggiungo i parametri di input
            cmdLogin.Parameters.Add("@USERID", SqlDbType.VarChar).Value = Nomeutente
            cmdLogin.Parameters.Add("@PASSWORD", SqlDbType.VarChar).Value = Password
    
            ' Eseguo
            Try
                conn.Open()
                cmdLogin.ExecuteNonQuery()
    
                If cmdLogin.Parameters("id").Value <> -1 Then
                    Return True
                Else
                    Throw New System.Data.DataException("Errore ADO.Net")
                    Return False
                End If
    
            Catch ex As System.Data.DataException
                HttpContext.Current.Response.Write("<font color=red>WARNING:</font>" & ex.Message)
                Return False
            Catch ex As Exception
                HttpContext.Current.Response.Write("<font color=red>WARNING:</font>" & ex.StackTrace)
                Return False
            Finally
                conn.Close()
                cmdLogin.Dispose()
            End Try

    ...mi da errore sulla .ExecuteNonQuery

    il campo ID nella tabella è di tipo Int ed è PK

  10. #10
    Utente di HTML.it L'avatar di geko
    Registrato dal
    Dec 2004
    Messaggi
    104
    cosa dice l'errore..?

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.