通过存储过程从SQL Server返回输出参数和c#

Dar*_*ren 2 sql-server stored-procedures output-parameter c#-4.0

我有一个时间从SQL Server获取输出值的魔鬼.

这是我的存储过程:

ALTER PROCEDURE [dbo].[Insert_UnknownCustomer_Quote_Document]
-- Add the parameters for the stored procedure here
@NewDocumentFileName nvarchar(100),
@NewDocumentWordCount int,
@NewQuoteAmount money,
@NewQuoteNumber int OUTPUT = 0

AS

DECLARE @Today datetime
SELECT @Today = GETDATE()

BEGIN TRANSACTION
BEGIN TRY

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 dbo.Customers(DateAdded)
VALUES (@Today)

INSERT INTO dbo.Quotes(CustomerID, QuoteAmount, QuoteDate)
VALUES (@@IDENTITY, @NewQuoteAmount, @Today)

SELECT @NewQuoteNumber = @@IDENTITY
INSERT INTO dbo.DocumentFiles(QuoteNumber, DocumentFileName, DocumentFileWordCount)
VALUES (@NewQuoteNumber, @NewDocumentFileName, @NewDocumentWordCount)

-- Return quote number
RETURN @NewQuoteNumber

END
COMMIT TRANSACTION
END TRY

BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'Transaction rolled back.'
END CATCH
Run Code Online (Sandbox Code Playgroud)

这是我的C#:

SqlParameter returnQuoteNumber = new SqlParameter("@NewQuoteNumber", SqlDbType.Int);
        returnQuoteNumber.Direction = ParameterDirection.ReturnValue;
        newSQLCommand.Parameters.Add(returnQuoteNumber);
Run Code Online (Sandbox Code Playgroud)

这是我现在收到的错误:

Procedure or function 'Insert_UnknownCustomer_Quote_Document' expects parameter '@NewQuoteNumber', which was not supplied.
Run Code Online (Sandbox Code Playgroud)

我已经尝试从开头取出@NewQuoteNumber并将它放在带有DECLARE的AS之后,但也会产生错误.

SQL*_*ace 5

ParameterDirection.Output 不想要 ParameterDirection.ReturnValue

也把它带出返回部分,返回应该用来返回一个状态而不是一个值

如果你确实使用了return,我会在事务提交之前完成