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

标签 sql-server c#-4.0 stored-procedures output-parameter

我很难从 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

这是我的 C#:

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

这是我现在收到的错误:

Procedure or function 'Insert_UnknownCustomer_Quote_Document' expects parameter '@NewQuoteNumber', which was not supplied.

我试过从开头取出@NewQuoteNumber 并将其放在带有 DECLARE 的 AS 之后,但这也会产生错误。

最佳答案

你想要 ParameterDirection.Output 而不是 ParameterDirection.ReturnValue

也把它从return部分拿出来,return应该用来返回状态而不是值

如果你确实使用 return,我会在事务提交之后而不是之前做

关于sql-server - 通过存储过程和 c# 从 SQL Server 返回输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10645730/

相关文章:

sql - 从地址获取街道名称和公寓号

sql - 在sql中对表进行简单的统计

sql - @@ROWCOUNT 的正确类型是什么?

c++ - C++ 中的 clr 托管 - 程序集路径

sql-server - 首先匹配密码然后更改密码的存储过程

WPF:选择新选项卡时,数据绑定(bind) TabControl 不会提交更改

c#-4.0 - 如何使用C# XNA定时器?

c# - 为什么我无法执行存储过程? (OracleException 被捕获)

postgresql - 如何从函数本身内部获取调用函数的语句?

javascript - 如何调试 Azure Cosmos DB 存储过程?