Stored procedures 使用PetaPoco执行存储过程

Stored procedures 使用PetaPoco执行存储过程,stored-procedures,petapoco,Stored Procedures,Petapoco,我有一个返回表值的存储过程 以下是我的存储过程: PROCEDURE [GetPermitPendingApproval] @permitYear int = NULL, AS BEGIN SELECT [p].[ID] ,[p].[PermitNumber] ,[p].[PermitTypeID] ,[p].[ApplicationDate] ,[u].[FirstName]

我有一个返回表值的存储过程

以下是我的存储过程:

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");
您将获得
列表
,其中T是一个POCO类型,具有要映射的属性,或者是一个
动态

因此,实际语法是:

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

var result=db.Fetch(“;EXEC GetPermitPendingApproval@permitYear”,
新的{permitYear=2013});

您需要在EXEC前面加一个分号

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

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


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

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

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

它不起作用,这里有一个错误:查询字符串“从[object]EXEC GetPermitPendingApproval中选择NULL”中的对象名称“[object]”无效。您能解释为什么需要分号吗?这是因为PetaPoco内部实现了某种东西吗?@rdans是的,这是一种变通方法“;”允许您结束第一条语句以开始另一条语句。换句话说,这将忽略petapoco插入的第一条语句,使其未使用。
var result = db.FetchProc<MyClass>("GetPermitPendingApproval", new { permitYear = 2013 });