2009-11-25 2 views
0

저장 프로 시저T-SQL 저장 프로시 저는 코드에서 null을 반환하지만 콘솔에서 작동합니다.

CREATE procedure [dbo].[get_unique_identifier] 
AS 
DECLARE @ret_val INT 
UPDATE seq SET @ret_val = id = id + 1 
RETURN @ret_val 

단일 int 열과 단일 행을 가진 테이블 (seq)을 쿼리하고 값을 증가시킨 다음 반환합니다. 간단히 말해서 PostgreSQL 시퀀스를 시뮬 레이팅하는 것입니다. ID 열은 작업을 수행하지 않습니다. 어쨌든 이것은 SQL Management Studio에서 잘 작동합니다. SQL Management Studio에서는

DECLARE @returned INT 
EXEC @returned = get_unique_identifier 
SELECT @returned 

의 순차적 실행으로 예상되는 결과가 생성됩니다. 불행히도, 나는

OdbcCommand command = new OdbcCommand("get_unique_identifier"); 
command.CommandType = CommandType.StoredProcedure; 
OdbcParameter return_param = new OdbcParameter("@RETURN_VALUE", OdbcType.BigInt); 
return_param.Direction = ParameterDirection.ReturnValue; 
command.Parameters.Add(return_param); 
Util.SQLExecuteParameterizedNonQuery(command); 
Console.WriteLine(command.Parameters["@RETURN_VALUE"].Value.ToString()); 

에서 작업하는 응용 프로그램에서 반환 된 값을 얻는 것처럼 보일 수 없습니다. 출력은 빈 문자열이지만 값 자체는 DBNull.Value입니다. OdbcType.BigInt는 제가하고있는 몇 가지 테스트에서 남겨 둡니다. 처음에는 Int이었습니다.

편집 : 이것은 분명히 ODBC의 버그입니다. 해결 방법은 아래에 게시되어 있습니다. do가없는 경우 ODBC를 사용하지 마십시오.

답변

1

나는 말을 죄송하지만,이 때문에 나는이하는 SqlClient 데이터베이스 개체를 사용하여 시도하고 예상대로 값을 반환하는 ODBC를

를 사용하여 수 있습니다.

+0

당신이 옳은 것처럼 보입니다. :(방금 SqlClient를 시도해 보았습니다. 이제 ODBC에 대한 해결책을 찾아야합니다. – dandan78

+0

sp : – dandan78

+0

에서'SELECT @ ret_val'로'RETURN @ ret_val'을 변경하여 작동하도록했습니다. 테이블 결과를 반환하십시오. –

0

저장 프로 시저의 반환 값은 BigInt (64 비트)가 아닌 Int (32 비트)이지만 코드에 문제가 있는지 확실하지 않습니다.

0

대신 출력 변수를 사용해 보지 않으셨습니까? 내 기억을 조깅하고 있습니다. 줄 command.Parameters [ "@ RETURN_VALUE"] .Value.ToString()은 다음과 같을 수 있습니다. 변수를 선언하고이를 TSQL EXEC 문에 사용했기 때문에 SQL Management Studio에서 작업했습니다. 이 대답이 어떻게 든 힌트를 줄 수 있기를 바랍니다.

호프가 도와 드리겠습니다. 감사합니다, Tom.

+0

다시 한번 살펴보면 Console.WriteLine (return_param.Value()) 또는 이와 동등한 시도가 있었습니까? 왜 네이티브 SqlClient 네임 스페이스가 아닌 ODBC를 사용 했습니까? – t0mm13b

+0

이 응용 프로그램은 원래 PostgreSQL에서 이식되었습니다. 우리는 SqlClient로 전환하려고하지만 지금은 시간이 없습니다. – dandan78

관련 문제