Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Execute stored procedure with PetaPoco

I have a stored procedure which returns back a table value.

Here is my stored procedure:

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

I am not sure whether we have such a way to use PetaPoco to execute a stored procedure and get a returned data as a table? Please help!

As normally I can execute a stored procedure with the follow script but it is not the way I want.

db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");
like image 480
Sam Avatar asked Nov 21 '13 16:11

Sam


3 Answers

You need to put a semicolon before EXEC.

var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @@permitYear = @0", 2013);
like image 86
anssi Avatar answered Nov 16 '22 11:11

anssi


Answer is probably late, but I hope, that it will be useful for future generations. You should turn EnableAutoSelect option to false on PetaPoco database object db.EnableAutoSelect = false; Otherwise it will keep adding SELECT NULL FROM [Object] to you sql statement.

It's good, that it's possible to debug PetaPoco sources.I've found this option only because of debugging!

like image 39
Denis.Grid Avatar answered Nov 16 '22 09:11

Denis.Grid


You get List<T> where T is a POCO type with the properties you want to map or a Dynamic

So the actual syntax is:

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

or

var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @permitYear",
                                                       new {permitYear = 2013});
like image 8
Eduardo Molteni Avatar answered Nov 16 '22 10:11

Eduardo Molteni