매개 변수가 필요한 저장 프로 시저를 실행하여 List를 얻는 방법?

asp.net-mvc c# dapper sql-server

문제

누군가이 일을하는 구문을 말해 줄 수 있습니까? https://github.com/StackExchange/dapper-dot-net에서 아무 것도 찾을 수 없습니다.

여기 내가 지금까지 가지고있는 것이있다.

using (con = new SqlConnection(connectionString))
{
    DynamicParameters param = new DynamicParameters();
    Debug.WriteLine(Int32.Parse(ConfigurationManager.AppSettings["max-files-limit"]));
    param.Add("@NumOfFiles", Int32.Parse(ConfigurationManager.AppSettings["max-files-limit"]));
    con.Open();
    IList<AsyncFileProcessingQueue> fileList = SqlMapper.Query<AsyncFileProcessingQueue>(con, "GetMostRecentFileStatus", param).ToList();
    return fileList.ToList();
}

이 오류가 발생합니다.

Procedure or function 'GetMostRecentFileStatus' expects parameter '@NumOfFiles', which was not supplied.

GetMostRecentFileStatus 는 저장 프로 시저입니다. 이것이 문제가 될지 모르겠습니다. 하지만 아마도 내가 스토어드 프로 시저를 사용하고 있다는 것을 모를 것이라고 생각하고 있었습니까?

나는 이런 예를 보았다.

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

cnn.Execute("spMagicProc", p, commandType: CommandType.StoredProcedure); 

int b = p.Get<int>("@b");
int c = p.Get<int>("@c"); 

그러나 출력 대신 목록을 얻으려면 어떻게해야합니까?

저장 프로 시저가 다음과 같이 보입니다.

CREATE PROCEDURE GetMostRecentFileStatus
(
    @NumOfFiles INT
)
AS
BEGIN
SELECT TOP (@NumOfFiles) Filename, Status
FROM AsyncFileProcessingQueue
ORDER BY UpdatedDate DESC
END

수락 된 답변

Query 메서드로 매개 변수를 전달했는지 확인하십시오.

이 작동합니다!

int numberOfFiles=2;
var q = @"exec GetMostRecentFileStatus @NumOfFiles";
using (con = new SqlConnection(connectionString))
{
    return con.Query<YourFileTypeDto>(q, new { @NumOfFiles=numberOfFiles }).ToList();
}

numberOfFiles 변수의 하드 코딩 된 값을 메소드의 argumenet 값으로 대체하거나 어딘가에서 읽을 수 있습니다


전문가 답변

이 작동합니다.

int numFiles = ...
var list = connection.Query<SomeType>(
      "GetMostRecentFileStatus",
      new { NumberOfFiles = numFiles },
     commandType:CommandType.StoredProcedure).AsList();


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