[SQL] C #에서 호출 SQL 정의 기능
SQLC #에서 호출 SQL 정의 기능
나는 SQL이 스칼라 함수를 작성했습니다 :
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
내 C # 코드에서이 함수를 호출하고 싶습니다. 여기에 지금까지 가지고 무엇을 :
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.당신은 단지 함수 이름을 호출 할 수 없습니다, 당신은 UDF를 사용합니다 인라인 SQL 문을 작성해야합니다 :
당신은 단지 함수 이름을 호출 할 수 없습니다, 당신은 UDF를 사용합니다 인라인 SQL 문을 작성해야합니다 :
SqlCommand Totalf = new SqlCommand("SELECT dbo.Tcupom(@code)", conex1);
그리고,이 저장 프로 시저 아니라, 자사의 사용자 정의 함수를 CommandType을 제거합니다.
모두 :
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; }
-
==============================
2.나는 DeriveParameters를 사용하여 다음 매개 변수 값을 설정하는 것입니다 내가 저장 프로 시저를 호출하는 것과 같은 방법으로 SQL 함수를 호출하고 싶었다. 그것은 상자 밖으로 스칼라 기능이이 작품을 밝혀 당신은 ExecuteNonQuery는을 사용하고 RETURN_VALUE를 읽을 수 있습니다. 아래의 샘플 코드를 참조하십시오 :
나는 DeriveParameters를 사용하여 다음 매개 변수 값을 설정하는 것입니다 내가 저장 프로 시저를 호출하는 것과 같은 방법으로 SQL 함수를 호출하고 싶었다. 그것은 상자 밖으로 스칼라 기능이이 작품을 밝혀 당신은 ExecuteNonQuery는을 사용하고 RETURN_VALUE를 읽을 수 있습니다. 아래의 샘플 코드를 참조하십시오 :
public int GetLookupCodeFromShortCode(short tableType, string shortCode) { using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Default"].ConnectionString)) { conn.Open(); using (var cmd = new SqlCommand("dbo.fnGetLookupCodeFromShortCode", conn)) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandTimeout = 30; SqlCommandBuilder.DeriveParameters(cmd); cmd.Parameters["@sintTableType"].Value = tableType; cmd.Parameters["@vchrShortCode"].Value = shortCode; cmd.Parameters["@chrLanguage"].Value = "en"; cmd.Parameters["@chrCountry"].Value = "en"; cmd.ExecuteNonQuery(); return (int)cmd.Parameters["@RETURN_VALUE"].Value; } } }
이 같은 스칼라 기능 코드 외모 :
CREATE FUNCTION [dbo].[fnGetLookupCodeFromShortCode]( @sintTableType SMALLINT, @vchrShortCode VARCHAR(5), @chrLanguage CHAR(2), @chrCountry CHAR(2)) RETURNS INT AS BEGIN DECLARE @intLookupCode INT SELECT @intLookupCode = LV.intLookupCode FROM tblLookupValueDesc LVD INNER JOIN tblLookupValue LV ON LV.sintLookupTableType = LVD.sintLookupTableType AND LV.intTableKey = LVD.intTableKey WHERE LVD.sintLookupTableType = @sintTableType AND LVD.vchrShortCode = @vchrShortCode AND LVD.chrCountry = @chrCountry AND LVD.chrLanguage = @chrLanguage RETURN @intLookupCode END GO
-
==============================
3.
... try { if (connectionState != ConnectionState.Open) conn.Open(); using (var cmd = conn.CreateCommand()) { cmd.CommandText = "udfName"; cmd.CommandType = CommandType.StoredProcedure; foreach (var cmdParam in sqlParams) { cmd.Parameters.Add(cmdParam); } var retValParam = new SqlParameter("RetVal", SqlDbType.Int) { //Set this property as return value Direction = ParameterDirection.ReturnValue }; cmd.Parameters.Add(retValParam); cmd.ExecuteScalar(); retVal = retValParam.Value; } } finally { if (connectionState == ConnectionState.Open) conn.Close(); } ...
from https://stackoverflow.com/questions/17047057/calling-sql-defined-function-in-c-sharp by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 : ORDER BY 절과 함께 ROWNUM을 사용하여 테이블 열을 업데이트 (0) | 2020.05.24 |
---|---|
[SQL] 어떻게 3360에 3306에서 MySQL의 기본 포트를 변경하려면 (0) | 2020.05.24 |
[SQL] 나는 MS Access에서 SQL INTERSECT 및 MINUS 연산을 구현할 수있는 방법 (0) | 2020.05.24 |
[SQL] 정렬 첫번째 열 ASC하지만 NULL 값으로? (0) | 2020.05.24 |
[SQL] 여러 열에서 CHECK 제약 조건 (0) | 2020.05.24 |