Выполнение хранимой процедуры с помощью PetaPoco

У меня есть хранимая процедура, которая возвращает значение таблицы.

Вот моя хранимая процедура:

PROCEDURE [GetPermitPendingApproval] 
    @permitYear int = NULL, 
AS
BEGIN
        SELECT [p].[ID]
          ,[p].[PermitNumber] 
          ,[p].[PermitTypeID]
          ,[p].[ApplicationDate]
          ,[u].[FirstName]
          ,[u].[MI]
          ,[u].[LastName]
          ,[u].[Suffix]
          ,[u].[ProfessionalTitle]
          ,[u].[WorksFor] 
      FROM [SciCollUser] u 
            INNER JOIN UserPermit up ON up.[UserID] = u.[ID] 
            INNER JOIN Permit p ON p.[ID] = [up].[PermitID] 
     WHERE (@permitYear IS NULL OR p.PermitYear = @permitYear) 
    ORDER BY [p].[ApplicationDate] ASC;
END

Я не уверен, есть ли у нас такой способ использования PetaPoco для выполнения хранимой процедуры и получения возвращаемых данных в виде таблицы? Пожалуйста, помогите!

Как обычно, я могу выполнить хранимую процедуру с помощью script, но это не так, как я хочу.

db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");

Ответ 1

Вам нужно поставить точку с запятой перед EXEC.

var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @@permitYear = @0", 2013);

Ответ 2

Ответ, вероятно, поздний, но я надеюсь, что он будет полезен для будущих поколений. Вы должны включить параметр EnableAutoSelect в значение false для объекта базы данных PetaPoco db.EnableAutoSelect = false; В противном случае он добавит SELECT NULL FROM [Object] к вам выражение sql.

Хорошо, что можно отлаживать источники PetaPoco. Я нашел эту опцию только из-за отладки!

Ответ 3

Вы получаете List<T>, где T - тип POCO со свойствами, которые вы хотите сопоставить, или Dynamic

Итак, фактический синтаксис:

var result = db.Fetch<dynamic>("EXEC GetPermitPendingApproval @0", 2013);

или

var result = db.Fetch<dynamic>("EXEC GetPermitPendingApproval @permitYear",
                                                       new {permitYear = 2013});