2013-06-11 16 views
10

ho scritto questa funzione scalare in TSQL:chiamata SQL funzione definita in C#

create function TCupom (@cupom int) 
returns float 
as 
begin 
    declare @Tcu float; 

    select @Tcu = sum (total) from alteraca2 where pedido = @cupom 

    if (@tcu is null) 
     set @tcu = 0; 

    return @tcu; 
end 

Voglio chiamare questa funzione nel mio codice C#. Ecco quello che ho finora:

public void TotalCupom(int cupom) 
    { 
     float SAIDA;   
     SqlDataAdapter da2 = new SqlDataAdapter(); 

     if (conex1.State == ConnectionState.Closed) 
     { 
      conex1.Open(); 
     } 

     SqlCommand Totalf = new SqlCommand("Tcupom", conex1); 
     SqlParameter code1 = new SqlParameter("@code", SqlDbType.Int); 
     code1.Value = cupom ; 
     Totalf.CommandType = CommandType.StoredProcedure ; 
     SAIDA = Totalf.ExecuteScalar(); 

     return SAIDA; 
} 
+1

stai avendo un problema? Vorresti dirci di cosa si tratta? – SLaks

risposta

27

non si può semplicemente chiamare il nome della funzione, è necessario scrivere una dichiarazione di SQL in linea, che si avvale della UDF:

SqlCommand Totalf = new SqlCommand("SELECT dbo.Tcupom(@code)", conex1); 

e rimuovere la CommandType, questa non è una stored procedure, è una funzione definita dall'utente.

In tutto:

public void TotalCupom(int cupom) 
    { 
     float SAIDA;   
     SqlDataAdapter da2 = new SqlDataAdapter(); 
     if (conex1.State == ConnectionState.Closed) 
     { conex1.Open();} 
     SqlCommand Totalf = new SqlCommand("SELECT dbo.Tcupom(@code)", conex1); 
     SqlParameter code1 = new SqlParameter("@code", SqlDbType.Int); 
     code1.Value = cupom; 
     SAIDA = Totalf.ExecuteScalar(); 


     return SAIDA; 
    } 
+0

In effetti, poiché ha eseguito "Totalf.CommandType = CommandType.StoredProcedure", può semplicemente chiamare il nome della funzione. –

+0

@ScottChamberlain Sei sicuro? Cosa accadrebbe se ci fosse una stored procedure chiamata 'Tcupom'? Sicuramente SQL Server verrebbe confuso ... – Curt

+2

No, hai ragione, ho appena realizzato che stava usando una funzione scalare, non una funzione basata su tabella. Non so se questi possono essere chiamati tramite SqlCommand impostato come StoredProcedure –

Problemi correlati