dapper를 통해 SQL 저장 프로 시저에서 삽입하면 -1이 반환됩니다 ( "작동하지 않음").

c# dapper sql sql-server stored-procedures

문제

"수동으로"작동하는 저장 프로 시저가 있는데, dapper를 통해 실행될 때 "-1"을 반환하고 오류는 발생하지 않습니다.

sproc :

  ... PROCEDURE [ts].[uspAddClientForm](
   @ClientId int,
   @SystemFormId bigint,
   @Year int,
   @Name nvarchar(255),
   @CreatedBy nvarchar(2000),
   @CreateDate datetime = NULL,
   @Active bit = 1,
   @ClientFormId bigint OUTPUT
  )
  AS
  BEGIN
    SET NOCOUNT ON  
    INSERT INTO [ts].[ClientForm] ([ClientId], [SystemFormId], [Year] 
    ,[Name] ,[CreatedBy] ,[CreateDate], [Active]) 
    VALUES(@ClientId, @SystemFormId, @Year, @Name, @CreatedBy, GETDATE(),    @Active)

    SET @ClientFormId = SCOPE_IDENTITY() 
  END

관련있는 코드 :

   var formParams = new DynamicParameters();
       formParams.Add("@ClientId", clientForm.ClientId);
       formParams.Add("@SystemFormId", clientForm.SystemFormId);
       formParams.Add("@Year", clientForm.Year);
       formParams.Add("@Name", clientForm.Name);
       formParams.Add("@CreatedBy", clientForm.Username);
       formParams.Add("@CreateDate", DateTime.Now);
       formParams.Add("@Active", 1);
       formParams.Add("@ClientFormId", DbType.Int64, direction: ParameterDirection.Output);

       var result =  dbConnection.Execute("ts.uspAddClientForm", formParams, commandType: CommandType.StoredProcedure);

   // retrieve output value
   var clientId = formParams.Get<long>("@ClientFormId");

또한 ExecuteScalar 사용하여 OUTPUT 매개 변수를 제거하고 SELECT 에서 SCOPE_IDENTITY() 를 반환하는 Query 시도했지만 성공하지 못했습니다. OUTPUT 방식을 사용하는 것을 선호하지만 작동하는 모든 항목에 대해 개방적이며 모범 사례를 일반적으로 구독합니다.

수락 된 답변

당신은 무엇인가로 신원을 선택하려고 할 수 있습니다 :

 SELECT SCOPE_IDENTITY() AS ClientFormId 

그리고 귀하의 코드에서 : // assuming that your identity is an int .ExecuteScalar<int>("ts.uspAddClientForm", ...)

그리고 출력 매개 변수도 필요 없으므로 제거하십시오.


인기 답변

라인에 따라 적절하게 수정하고 시도하십시오.

     formParams.Add("@ClientFormId", DbType.Int64, direction: ParameterDirection.Output);

에,

     formParams.Add("@ClientFormId","",dbType: DbType.Int64, direction: ParameterDirection.Output);


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.