19 messaggi dal 04 maggio 2014
Ciao a tutti,
spero mi possiate aiutare, sto impazzendo!!!!

ho una sp con una parametro di output, ma nella maggior parte dei casi, oltre a restituire questo parametro, viene restituito anche un recordset.

nel caso in cui la sp mi restituisce solo il par di output, non ho problemi, ma nel momento in cui l'esecuzione mi deve restituire anche il recordset, sia questo che il par di output sono vuoti. Perchè?

qui la sp:
ALTER PROCEDURE [dbo].[Giocatori_Offerta] @id_utente int, @id_torneo int, @err int = 0 OUTPUT
AS
/*
declare @err int = 0
EXEC Giocatori_Offerta 1,1, @err output

select @err
*/
BEGIN

SET NOCOUNT ON;

DECLARE @DataFine datetime;

SELECT @DataFine = dt_fine
FROM Asta a
inner join Torneo t on a.id_torneo = t.id_torneo
WHERE t.id_torneo = @id_torneo

if(@DataFine <= GETDATE()) --l'asta è chiusa
set @err = -1001
else if(@DataFine is null)
set @err = -1002

if @err = 0
BEGIN
set @err = 1024
SELECT p.id_player,
isnull(o.id_offerta,0) id_offerta,
p.nome,
p.cognome,
r.id_ruolo,
r.sigla,
c.nome_club,
o.timestamp,
isnull(o.valore, 0) as valore,
o.attiva
FROM Players p
inner JOIN RuoloPlayer r ON p.id_ruolo = r.id_ruolo
inner JOIN Clubs c ON c.id_club = p.id_club
LEFT JOIN Offerta o ON p.id_player = o.id_player and o.id_allenatore = @id_utente and o.attiva = 1
END
END

sotto il codice c#:
public SqlDataReader EseguiSPParameter(out int iReturn, string NameReturn)
{
this.ListParameter.Add(new ParameterSP(NameReturn, System.Data.SqlDbType.Int, 0, ParameterDirection.Output));
foreach (ParameterSP par in listParameter)
{
SqlParameter param = Comm.CreateParameter();
param.ParameterName = par.Nome;
param.SqlDbType = par.Tipo;
param.Value = par.Value;
param.Direction = par.Direction;
this.Comm.Parameters.Add(param);
}
SqlDataReader reader = this.EseguiSPReader();
iReturn = Convert.ToInt32(this.Comm.Parameters[NameReturn].Value);
return reader;
}

Potete aiutarmi?

grazie
daniela
112 messaggi dal 22 gennaio 2017
Contributi
Ciao Daniela, hai provato a scrivere il codice con le classi native, anziché utilizzare le classi da te create? (EseguiSPReader).
Guardando il codice mi sembra sia corretto.
Modificato da andrea.tosato86 il 06 novembre 2017 23.59 -
19 messaggi dal 04 maggio 2014
Si,ho risolto utilizzando il parametro return anziche come output. Ovviamente per leggerlo ho dovuto prima salvare il recordset in un datatable quindi chiudere l'sqldatareader e solo a quel punto il value del return era accessibile.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.