【问题标题】:Return an output parameter from SQL Server via a stored procedure and c#通过存储过程和 c# 从 SQL Server 返回输出参数
【发布时间】:2015-09-30 22:00:21
【问题描述】:

我正忙着从 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 之后,但这也会产生错误。

【问题讨论】:

  • 仅供参考:Scope_Identity() 是比@@IDENTITY 更明智的选择。

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


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢您的帮助。我会尽快将其标记为答案。
【解决方案2】:
SqlCommand.Parameters.Add("@NewQuoteNumber", SqlDbType.Int).Direction = ParameterDirection .Output ;

<SqlCommand>.ExecuteNonQuery();

int NewQuoteNumber = int.Parse(SqlCommand.Parameters["@NewQuoteNumber"].Value .ToString ());

现在你可以在你的代码中使用这个值了。

【讨论】:

  • 欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击“代码示例”按钮 ({ } ) 在编辑器工具栏上以很好地格式化和语法突出显示它!
【解决方案3】:

这一行:

int NewQuoteNumber = int.Parse(SqlCommand.Parameters["@NewQuoteNumber"].Value .ToString ());<br />

应该是:

int NewQuoteNumber = int.Parse(SqlCommand.Parameters["NewQuoteNumber"].Value .ToString ());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2013-01-27
    • 2016-11-03
    • 2014-11-06
    相关资源
    最近更新 更多