2013-06-11 10 views
10

Pisałem tę funkcję skalarną w TSQL:Wywołanie SQL określoną funkcję w 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 

Chcę wywołać tę funkcję w moim kodu C#. Oto co mam do tej pory:

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

Czy masz jakiś problem? Czy chcesz nam powiedzieć, co to jest? – SLaks

Odpowiedz

27

Nie można po prostu zadzwonić do nazwy funkcji, trzeba będzie napisać inline SQL, która korzysta z UDF:

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

i wyjąć CommandType, to nie jest procedura składowana, jest to funkcja zdefiniowana przez użytkownika.

W sumie:

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

Właściwie ponieważ wykonał 'Totalf.CommandType = CommandType.StoredProcedure', może po prostu wywołać nazwę funkcji. –

+0

@ScottChamberlain Czy na pewno? Co się stało, gdyby była procedura składowana o nazwie 'Tcupom'? Z pewnością program SQL Server byłby zdezorientowany ... – Curt

+2

Nie, masz rację, właśnie uświadomiłem sobie, że używał funkcji skalarnej, a nie opartej na tabelach. Nie wiem, czy można je wywołać przez SqlCommand ustawiony jako StoredProcedure –

Powiązane problemy