【发布时间】: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