使用PetaPoco执行存储过程

时间:2013-11-21 16:41:43

标签: stored-procedures 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执行存储过程并将返回的数据作为表格获取?请帮忙!

通常我可以使用跟随脚本执行存储过程,但这不是我想要的方式。

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

4 个答案:

答案 0 :(得分:26)

你需要在EXEC之前加一个分号。

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

答案 1 :(得分:14)

答案可能已经很晚了,但我希望,这对后代有用。您应该在PetaPoco数据库对象db.EnableAutoSelect = false;上将EnableAutoSelect选项设置为false 否则它将继续向您的sql语句添加SELECT NULL FROM [Object]

很好,可以调试PetaPoco来源。我发现这个选项只是因为调试!

答案 2 :(得分:7)

您获得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});

答案 3 :(得分:2)

从v6.0.344-beta开始,PetaPoco现在原生支持存储的proc,因此您可以执行以下操作:

var result = db.FetchProc<MyClass>("GetPermitPendingApproval", new { permitYear = 2013 });