¿Cómo obtener List desde la ejecución del procedimiento almacenado que necesita parámetros?

asp.net-mvc c# dapper sql-server

Pregunta

¿Puede alguien decirme la sintaxis para hacer esto? No puedo encontrar nada en https://github.com/StackExchange/dapper-dot-net

Esto es lo que tengo hasta ahora:

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();
}

Recibo este error,

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

GetMostRecentFileStatus es un Procedimiento almacenado. No sé si este podría ser el problema. pero estaba pensando que tal vez no sabe que estoy usando un procedimiento almacenado?

Vi un ejemplo como este

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"); 

Pero, ¿cómo puedo obtener una lista en lugar de productos?

El procedimiento almacenado se ve así

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

Respuesta aceptada

Asegúrese de pasar los parámetros con el método de consulta.

¡Esto debería funcionar!

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

Puede reemplazar el valor codificado de la variable numberOfFiles con su valor de argumenet de su método / leer desde algún lugar


Respuesta experta

Esto debería funcionar:

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué