使用PetaPoco执行存储过程

Sam*_*Sam 13 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
Run Code Online (Sandbox Code Playgroud)

我不确定我们是否有这样的方法来使用PetaPoco执行存储过程并将返回的数据作为表格获取?请帮忙!

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

db.Execute("EXEC GetPermitPendingApproval @permitYear=2013");
Run Code Online (Sandbox Code Playgroud)

ans*_*ssi 27

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

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

  • @rdans是的,这是一个解决方案";" 允许您结束第一个语句以启动另一个语句.换句话说,这忽略了由petapoco插入的第一个语句使其未使用. (2认同)

小智 15

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

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


Edu*_*eni 7

你得到的List<T>地方T是POCO类型,你想要映射的属性或aDynamic

所以实际的语法是:

var result = db.Fetch<dynamic>(";EXEC GetPermitPendingApproval @0", 2013);
Run Code Online (Sandbox Code Playgroud)

要么

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

  • 它不起作用,这是一个错误:此查询字符串“ SELECT NULL FROM [Object] EXEC GetPermitPendingApproval”中的对象名称“ [Object]”无效 (2认同)

ash*_*ber 5

从 v6.0.344-beta 开始,PetaPoco 现在支持本地存储过程,因此您可以执行以下操作:

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