>source

데이터베이스 컨텍스트 파일이 있고 SQL의 SSMS에서 프로 시저를 만들었습니다.

alter procedure gross_Sal(@empID int,@annual_sal int output)
as
begin
SELECT @annual_sal=SAL*12from EMP WHERE EMPNO=@empID
end
declare @ans int;
exec gross_Sal 1111, @annual_sal=@ans output;
select @ans as 'gross salary';

이것은 SQL에서 잘 작동하지만 C #에서 이것을 호출하는 방법을 모르겠습니다.

코드를 작성했습니다.

  private static void paramProc()
    {
            var ctx = new trainingContext();
            var param = new SqlParameter[] {
                new SqlParameter()
                {
                    ParameterName="@empno",
                    SqlDbType=System.Data.SqlDbType.Int,
                    Size =100,
                    Direction=System.Data.ParameterDirection.Input,
                    Value = 1111
                },
                new SqlParameter()
                {
                    ParameterName="@annual_sal",
                    SqlDbType=System.Data.SqlDbType.Int,
                    Size =100,
                    Direction=System.Data.ParameterDirection.Output,
                }
            };
            var ans = ctx.Emps.FromSqlRaw("@ans int");
            var result = ctx.Emps.FromSqlRaw("gross_Sal @empno, @annual_sal = @ans output", param[0],param[1]);
            Console.WriteLine("gross sal of the emp "+ans);
        }}

내 C # 코드에 큰 실수가있을 수 있지만 이걸 도와주세요.

나는 이것을 출력으로 얻고있다.

    gross sal of the emp Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[HW_SQL.Models.Emp]

edit1 :- 나는 이것을 시도했다 :-

var result = ctx.Emps.FromSqlRaw($"EXEC gross_Sal  @empID, @annual_sal OUTPUT", param[0], param[1]).AsEnumerable().FirstOrDefault();
 Console.WriteLine("gross salary="+param[1].Value);

블록을 잡아서 오류를 표시합니다.

  error

  • 답변 # 1

    이것은 문제를 해결했습니다.

    ctx.Database.ExecuteSqlRaw("gross_Sal @empID, @annual_sal OUTPUT", param);
     Console.WriteLine("gross sal of the emp "+param[1].Value);
    
    

    FromSqlRaw를 사용하고 있었고 EXEC를 사용하여 다음과 같이 작동해야했습니다.

    var result = ctx.Emps.FromSqlRaw($"EXEC gross_Sal  @empID, @annual_sal OUTPUT", param[0], param[1]).AsEnumerable().FirstOrDefault();
    Console.WriteLine("gross salary="+param[1].Value);
    
    

    하지만 메시지없이 오류가 발생했습니다. 그러나 사용

    ctx.Database.ExecuteSqlRaw("gross_Sal @empID, @annual_sal OUTPUT", param);
    
    

    직접 실행할 수 있습니다.

    같은 문제에 직면 한 사람에게 도움이되기를 바랍니다.

관련 자료

  • 이전 qt - C ++ 및 Lua가 런타임에 사용자 지정 Lua 라이브러리 등록
  • 다음 python - 시퀀스에서 특정 문자 옆에 회문을 찾는 방법은 무엇입니까?