2017-01-19 2 views
1

다음과 같은 저장 프로 시저를 사용하여 데이터베이스에서 하나의 데이터를 가져 오려고합니다.C# 코드가 저장 프로 시저의 값을 반환하지 않는 이유

USE [PSD] 
GO 
/****** Object: StoredProcedure [dbo].[ocso_GetNextDTEventNumber] Script Date: 1/19/2017 10:12:19 AM ******/ 
SET ANSI_NULLS ON 
GO 
    SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[ocso_GetNextDTEventNumber] 
    @EventNumber varchar(15) OUTPUT 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

--increment last number by 1 
UPDATE LU_EVENT_NUMBERS SET evn_last_number = evn_last_number + 1 where evn_year = Year(GetDate()) 
--return event number to caller 

    --Get the next event number for all incidents 
SELECT @EventNumber = evn_comp_formatted_next_num from LU_EVENT_NUMBERS where evn_year = Year(GetDate()) 

END 

나는이 SQL 코드

DECLARE @NewEventNumber varchar(15) 
Execute dbo.ocso_GetNextDTEventNumber 
@EventNumber = @NewEventNumber OUTPUT; 
Print convert(varchar(15),@NewEventNumber) 

을 사용하여이 절차를 테스트하고 내가 기대할 수있는 결과를 얻을 수 있습니다. 이제 다음과 같은 C# 코드에서 결과를 얻으려고 시도 할 때 :

빈 문자열이 다시 나타납니다. 왜 이것이 작동하지 않습니까?

+7

귀하의 매개 변수'EventNumber' @가 아닌'@ NewEventNumber' – Crowcoder

+2

'_cmd.CommandType = CommandType.StoredProcedure'입니다? –

+0

감사합니다 #Crowcoder를 @EventNumber로 변경했을 때 { "프로 시저 또는 함수 'ocso_GetNextDTEventNumber'가 제공되지 않은 '@EventNumber'매개 변수를 필요로합니다."} – Perry

답변

4

당신은 당신이 저장 - 프로 시저를 실행 할 명령을 알려 잊어 버린 :

using (SqlCommand _cmd = new SqlCommand("ocso_GetNextDTEventNumber", _con)) 
{ 
    _cmd.CommandType = CommandType.StoredProcedure; 
    //... 
} 

기본이 Text이다 (그래서 일반 SQL 쿼리를) 촬영을 지정하지 않은 경우. 이 경우 예외가 발생해야하기 때문에 어딘가에 Try....Catch이 비어 있다고 생각됩니다.

당신은 또한 동일한 매개 변수 이름을 사용해야합니다

_cmd.Parameters.Add("@EventNumber", SqlDbType.VarChar, 15).Direction = ParameterDirection.Output; 
_cmd.ExecuteNonQuery(); 
results = _cmd.Parameters["@EventNumber"].Value.ToString(); 
+0

고맙습니다. – Perry