0

エンティティ フレームワーク、vb、および sql サーバーを使用します。

新しいレコードを挿入し、関連するレコードの新しい ID を返すストアド プロシージャ (以下に示す) があります (id 列は適切に定義された ID 列です)。ストアド プロシージャはエンティティ データ モデルにインポートされ、関数として呼び出されます。期待される結果は、新しいレコードの ID です。ただし、代わりに常に 0 が返されます。

ssms でストアド プロシージャを実行すると、結果ウィンドウに期待どおりの結果が表示され、値が 0 の別の結果も得られます (これは明らかに、マップされたストアド プロシージャに返されるものです)。

ストアド プロシージャにエラーがあるか、関数の呼び出し方法に問題があります (以下も参照)。あなたが提供しなければならない提案があれば、本当に感謝しています。

ストアド プロシージャ:

ALTER PROCEDURE [Finances].[CreatePurchaseInvoicePayment]
-- Add the parameters for the stored procedure here
@PurchaseInvoiceId int = NULL,
@SupplierId int = NULL,
@PurchaseInvoicePaymentDate date = NULL,
@Amount money = NULL,
@PaymentType int = NULL,
@ChequeNumber nchar(10) = NULL,
@BankAccountId int = NULL,
@purchaseInvoiceCreditNoteId int = NULL,
@ConversionFactor numeric(4,2) = NULL,
@ModifiedDate date = NULL,
@id int = NULL OUTPUT 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO Finances.PurchaseInvoicePayments
VALUES
(
@PurchaseInvoiceId,
@SupplierId,
@PurchaseInvoicePaymentDate,
@Amount,
@PaymentType,
@ChequeNumber,
@BankAccountId,
@purchaseInvoiceCreditNoteId,
@ConversionFactor,
@ModifiedDate
)
SET @id =  SCOPE_IDENTITY() 
END

これは次のように呼び出されます:

Try
                pipId = CInt(te.CreatePurchaseInvoicePayment(pip.PurchaseInvoiceId, pip.SupplierId, pip.PurchaseInvoicePaymentDate, pip.Amount, pip.PaymentType, pip.ChequeNumber, pip.BankAccountId, pip.PurchaseInvoiceCreditNoteId, pip.ConversionFactor, pip.ModifiedDate,nothing).FirstOrDefault)
            Catch ex As Exception

私が言うように、誰かが私を正しい方向に向けることができれば、私は最も感謝しています.

4

1 に答える 1

0

関数は SP からの実際の結果セットを期待していると思います。この場合、出力パラメーターは必要ありません。SP の最後に追加するだけです。

SELECT SCOPE_IDENTITY()

関数はそれを正しく読み取る必要があります。

于 2013-10-05T14:13:03.040 に答える