0

値を返すストアドプロシージャを呼び出そうとしています。しかし、いくつかの理由で、それが値を返していない、それは代わりにエラーを投げています:これは想定している私のモデルクラスであるEntity Frameworkと.Net Core 1.1を使用してデータを返すストアドプロシージャを呼び出す方法

var arTransactionid = context.Set<ARTransaction>() 
          .FromSql("core.ARTransaction_Insert @PersonID = {0},@ContractID = {1},@TransactionCodeID = {2},@TransactionDate = {3}," + 
     "@TransactionDesc = {4},@Amount = {5},@CurrencyID = {6},@ExchangeRate = {7}," + 
     "@BaseAmount = {8},@PostedDate = {9},@DueDate = {10},@Reference = {11}," + 
     "@Reference2 = {12},@Reversal = {13},@BaseAdjustment = {14},@BatchID = {15}," + 
     "@ParentTransactionID = {16},@InvoiceID = {17},@UserID = {18}", 46736, null, 197, "2017-08-25 00:00:00 -05:00", null, 501.0000, 2, 1, 501.0000, null, null, null, null, 0, 0, null, 0, null, 3052) 
          .FirstOrDefault(); 

enter image description here

私はこのようなストアドプロシージャを呼び出していますストアドプロシージャからの戻り値で満たされる:

public class ARTransaction 
{ 
    public String arTransactionID { set; get; } 
} 

これは、ストアドプロシージャは、次のとおり

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER Procedure [core].[ARtransaction_Insert] 
    @PersonID int, 
    @ContractID int, 
    @TransactionCodeID int, 
    @TransactionDate date, 
    @TransactionDesc nvarchar(100), 
    @Amount money, 
    @CurrencyID int, 
    @ExchangeRate decimal(18,6), 
    @BaseAmount money, 
    @PostedDate DATE = null, 
    @DueDate date, 
    @Reference nvarchar(50), 
    @Reference2 nvarchar(50), 
    @Reversal BIT = 0, 
    @BaseAdjustment BIT = 0, 
    @BatchID int, 
    @ParentTransactionID int, 
    @InvoiceID INT = null, 
    @UserID INT, 
    @SessionGUID UNIQUEIDENTIFIER = null 
AS 
    SET NOCOUNT ON 

    DECLARE @ARtransactionID INT, 
      @Valid INT, 
      @ValidMessage NVARCHAR(100) 

    --More code goes here *********** 

    RETURN @ARtransactionID 

SQL Server Management Studioでストアドプロシージャを呼び出すと、値は返されず、メッセージのみが返されます。結果を得るために

enter image description here

、Iは、変数を宣言し、ストアドプロシージャに割り当てます。

DECLARE @arTransctionInserted int; 

EXEC @arTransctionInserted = core.ARTransaction_Insert 
      @PersonID = 46736, 
      @ContractID = NULL, 
      @TransactionCodeID = 197, 
      @TransactionDate = '2017-08-25 00:00:00 -05:00', 
      @TransactionDesc = NULL, 
      @Amount = 500.0000, 
      @CurrencyID = 2, 
      @ExchangeRate = 1, 
      @BaseAmount = 500.0000, 
      @PostedDate = NULL, 
      @DueDate = NULL, 
      @Reference = NULL, 
      @Reference2 = NULL, 
      @Reversal = 0, 
      @BaseAdjustment = 0, 
      @BatchID = NULL, 
      @ParentTransactionID = 0, 
      @InvoiceID = NULL, 
      @UserID = 3052; 

SELECT @arTransctionInserted as IDTransaction; 

enter image description here

はどうやって値を返すストアドプロシージャを呼び出すことができますか?

context.Set<ARTransaction>().FromSql("") 

すでにすべてのクエリを含めて呼び出そうとしましたが、エラーはスローされ続けます。

var arTransactionid = context.Set<ARTransaction>().FromSql("DECLARE @arTransctionInserted int; exec @arTransctionInserted = core.ARTransaction_Insert @PersonID = {0},@ContractID = {1},@TransactionCodeID = {2},@TransactionDate = {3}," + 
       "@TransactionDesc = {4},@Amount = {5},@CurrencyID = {6},@ExchangeRate = {7}," + 
       "@BaseAmount = {8},@PostedDate = {9},@DueDate = {10},@Reference = {11}," + 
       "@Reference2 = {12},@Reversal = {13},@BaseAdjustment = {14},@BatchID = {15}," + 
       "@ParentTransactionID = {16},@InvoiceID = {17},@UserID = {18};SELECT @arTransctionInserted as IDTransaction;", 46736, null, 197, "2017-08-25 00:00:00 -05:00", null, 501.0000, 2, 1, 501.0000, null, null, null, null, 0, 0, null, 0, null, 3052).FirstOrDefault(); 
+0

ここでsprocの中にselectステートメントを投稿できますか? – Nathan

+0

あなたはSPの欠けている部分に言及していますか? – mavi

+0

はい、それを確認することは本当に役立つかもしれません。 – Nathan

答えて

1

RETURN出力SP値ではないだろうとだけ呼び出して、データベース・オブジェクトの変数に置かれるデータを返します。このため、EXECUTEは動作しますが、SP自体を実行すると「コマンドが正常に完了しました」というメッセージが返されます。

SELECT @ARtransactionID;を使用すると、探しているIDが出力されるはずです。

関連する問題