Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Store procedure e parametri OUTPUT--- .NET2005

Premesso che ho usato Google, MSDN, ricerche su Microsoft..... ecco la 
domanda, sicuramente una cavolata, ma sto impazzendo:
Sto usando 
VB.NET
 2005
Ho una store procedure che usa 2 parametri INPUT ed 1 parametro OUTPUT.
Creo i parametri da codice, chiamo la StoreProcedure, la eseguo, chiudo il 
datareader e....il parametro in OUTPUT è ancora Null, non cambia 
assolutamente eppure da codiceTSQL lo assegno sempre, Eccovi il codice della 
store:
CREATE      PROCEDURE dbo.sCheck_LogIn
    @Utente   varchar(50)='',
    @Pwd      nvarchar(32)='',
    @Testo   varchar(255)='' OUTPUT
as
declare @i bigint
declare @u bigint
Select @i=Count(*) from tabUtenti Where cast(rtrim(Utente) as 
varbinary)=cast(rtrim(@Utente) as varbinary) and cast(rtrim(Pwd) as 
varbinary)=cast(rtrim(@Pwd) as varbinary)
if @i=0
 Begin
  set @Testo='Nessun Utente con questo Nome'
  Return @i
 end
if @i>1
 begin
  set @Testo='Troppi Utenti con questo Nome'
  Return @i
 end
set @Testo='Ok'
RETURN @i
Ed ecco il codice di .NET
    Public Function AutenticaUtenteViaLogIn(ByRef strUtente As String, ByRef 
strPwd As String, ByRef bRicorda As Boolean) As Boolean
        Dim cnnCheckUtente As New SqlConnection
        ConnettiDB(cnnCheckUtente)
        Dim cmdCheckUtente As New SqlCommand("sCheck_LogIn", cnnCheckUtente)
        cmdCheckUtente.CommandType = CommandType.StoredProcedure
        Dim Par1 As New SqlParameter("@Utente", SqlDbType.VarChar, 50, 
ParameterDirection.Input)
        Dim Par2 As New SqlParameter("@Pwd", SqlDbType.NVarChar, 32, 
ParameterDirection.Input)
        Dim Par3 As New SqlParameter("@Testo", SqlDbType.VarChar, 255, 
ParameterDirection.Output)
        Par1.Value = strUtente
        Par2.Value = strPwd
        cmdCheckUtente.Parameters.Add(Par1)
        cmdCheckUtente.Parameters.Add(Par2)
        cmdCheckUtente.Parameters.Add(Par3)
        Dim dr1 As SqlDataReader
        dr1 = cmdCheckUtente.ExecuteReader()
        Do While dr1.Read()
        Loop
        dr1.Close()
        If (Not IsNothing(Par3.Value) And Par3.Value = "") Then
            strUtente = Par1.Value
            strPwd = Par2.Value
            AutenticaUtenteViaLogIn = True
        Else
            strUtente = "Ospite"
            strPwd = ""
            AutenticaUtenteViaLogIn = False
        End If
        DisconnettiDB(cnnCheckUtente)
    End Function

  Dim Par1 As New SqlParameter("@Utente", SqlDbType.VarChar, 50,
ParameterDirection.Input)
[CUT
Ciao Spiegator,
nella Stored procedure non ho capito perchè casti i varchar in varbinary
quando fai il confronto nella where, comunque non è questo il problema.
Il problema è che usi l'overload con 4 argomenti quando crei i parametri.
Il metodo per l'overload con 4 argomenti non prevede la direzione del
parametro nel quarto argomento.
Usa l'overload con 3 argomenti, la direzione del parametro la assegni dopo.
----
......
......
......
Dim Par1 As New SqlParameter("@Utente", SqlDbType.VarChar, 50)
Dim Par2 As New SqlParameter("@Pwd", SqlDbType.NVarChar, 32)
Dim Par3 As New SqlParameter("@Testo", SqlDbType.VarChar, 255)
Par1.Direction = ParameterDirection.Input
Par1.Value = strUtente
Par2.Direction = ParameterDirection.Input
Par2.Value = strPwd
Par3.Direction = ParameterDirection.Output
cmdCheckUtente.Parameters.Add(Par1)
cmdCheckUtente.Parameters.Add(Par2)
cmdCheckUtente.Parameters.Add(Par3)
'Qui ho tolto il datareader perchè non ti serve.
cmdCheckUtente.ExecuteNonQuery()
If (Not IsNothing(Par3.Value) And Par3.Value = "") Then
    ecc ecc
......
......
----
ps. con C# il compilatore ti avrebbe segnalato subito l'errore.
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

> ps. con C# il compilatore ti avrebbe segnalato subito l'errore.
dimenticavo...
casomai imposta gli avvisi sulle conversioni implicite, così ti accorgi
subito se c'è qualcosa che potrebbe non andare :-)


 ha scritto nel 
messaggio news:4532c570$0$994$5fc...@news.tiscali.it...


 farlo, perchè non lo segnala?
[CUT]
Ciao Spiegator,
Il compilatore non segnala errore perchè VB di default esegue una
conversione implicita da ParameterDirection.Input a Stringa, che è il tipo
di campo del quarto argomento dell'overload a 4 argomenti.
Se vuoi che ti venga notificato l'errore devi modificare le impostazioni del
compilatore.
Premi  Progetto-->Proprietà , vai nella scheda Compila e modifica la
notifica nella riga Conversione implicita, scegli Avviso o Errore a seconda
delle tue esigenze.
