Wie erhalte ich List von der Ausführung einer gespeicherten Prozedur, die Parameter benötigt?

asp.net-mvc c# dapper sql-server

Frage

Kann mir jemand die Syntax dafür sagen? Ich kann nichts auf https://github.com/StackExchange/dapper-dot-net finden

Folgendes habe ich bisher:

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

Ich bekomme diesen Fehler,

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

GetMostRecentFileStatus ist eine gespeicherte Prozedur. Ich weiß nicht, ob dies das Problem sein könnte. aber ich dachte, dass es vielleicht nicht weiß, dass ich eine gespeicherte Prozedur verwende?

Ich habe ein solches Beispiel gesehen

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

Aber wie kann ich eine Liste anstelle von Ausgaben bekommen?

Die gespeicherte Prozedur sieht so aus

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

Akzeptierte Antwort

Stellen Sie sicher, dass Sie die Parameter mit der Query-Methode übergeben.

Das sollte funktionieren!

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

Sie können den hardcoded Wert von numberOfFiles Variable mit Ihrem argumenet Wert Ihrer Methode ersetzen / von irgendwo lesen


Expertenantwort

Das sollte funktionieren:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum