web-dev-qa-db-ja.com

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");
13
Sam

EXECの前にセミコロンを付ける必要があります。

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

答えはおそらく遅いですが、将来の世代に役立つことを願っています。 PetaPocoデータベースオブジェクトdb.EnableAutoSelect = false;でEnableAutoSelectオプションをfalseに設定する必要があります。そうしないと、SQLステートメントにSELECT NULL FROM [Object]が追加され続けます。

PetaPocoソースをデバッグできるのは良いことです。このオプションはデバッグのためだけに見つかりました。

15
Denis.Grid

あなたは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});
8
Eduardo Molteni

V6.0.344-beta以降、PetaPocoはストアドプロシージャをネイティブにサポートするようになったため、次のことができます。

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