2012-05-18 3 views
2

SQL Server에서 출력 값을 가져 오는 악마가 있습니다. 여기 저장 프로 시저 및 저장 프로 시저를 통해 SQL Server에서 출력 매개 변수를 반환합니다. C#

내 저장 프로 시저입니다 :

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#입니다 :

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

내가 복용 시도 : 여기

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

내가 지금 수신하고있는 오류입니다 @NewQuoteNumber는 처음부터 빠져 나와서 DEC을 사용하여 AS 다음에 배치하지만 오류가 발생합니다. 당신이 반환을 사용하는 경우에 당신이하지 ParameterDirection.ReturnValue

또한

반환 부분에서 그것을 가지고 ParameterDirection.Output을 원하는

+4

참고 :'SCOPE_IDENTITY()가''@@ IDENTITY'보다 훨씬 현명한 선택이 될 것입니다. – HABO

답변

4

, 반환 상태되지에게 값을 반환하는 데 사용되어야한다

그리고 난 후 그것을 할 것 트랜잭션이 커밋되지 않고 완료되었습니다.

+0

도움 주셔서 대단히 감사합니다. 나는 그것이 가능한 한 빨리 대답으로 표시 할 것이다. – Darren

1
SqlCommand.Parameters.Add("@NewQuoteNumber", SqlDbType.Int).Direction = ParameterDirection .Output ; 

<SqlCommand>.ExecuteNonQuery(); 

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

이제이 값을 코드에 사용할 수 있습니다.

+1

StackOverflow에 오신 것을 환영합니다. 코드, XML 또는 데이터 샘플을 게시하는 경우 ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드 샘플"버튼 ('{}) '을 클릭하십시오. 구문 강조! –

0

이 라인 :

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

가 있어야한다 :

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