2013-06-11 4 views
10

Ich habe diese Skalarfunktion in TSQL geschrieben:Aufruf SQL Definierte Funktion 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 

ich diese Funktion in meinem C# -Code anrufen möchten. Hier ist, was ich bisher:

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

Haben Sie ein Problem? Möchtest du uns sagen, was es ist? – SLaks

Antwort

27

Sie können nicht nur den Funktionsnamen aufrufen, müssen Sie eine Inline-SQL-Anweisung schreiben, die Verwendung der UDF macht:

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

und entfernen Sie die CommandType, dies ist keine gespeicherte Prozedur, es ist eine benutzerdefinierte Funktion.

In allen:

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

Eigentlich, weil er 'Totalf.CommandType = CommandType.StoredProcedure' getan hat, kann er einfach den Funktionsnamen aufrufen. –

+0

@ScottChamberlain Sind Sie sicher? Was wäre, wenn es eine gespeicherte Prozedur namens 'Tcupom' gäbe? Sicher würde SQL Server verwirrt werden ... – Curt

+2

Nein, Sie haben recht, ich habe gerade realisiert, dass er eine Skalarfunktion verwendet, keine Tabellenfunktion. Ich weiß nicht, ob diese über SqlCommand als StoredProcedure –

Verwandte Themen