2010-04-18 3 views
0

SQL Server 데이터베이스 (삽입, 편집 등)에서 작업을 실행하고 Stored Procs를 호출 할 수 있도록 Windows 서비스를 만들고 있습니다.C에서 호출 할 때 저장된 프로 시저 유형을 아는 경우

그러나 SP의 유형을 알 수있는 방법이 있습니까? C#에서 호출 할 때, 1 값 이상을 리턴하는지, 아니면 아무것도 반환하지 않으면 knof가 필요합니다 (executereader, scalar 등을 사용할 수 있습니까?)?

감사

답변

0
  1. 비 쿼리은 일반적으로 SqlCommand.ExecuteNonQuery() 호출합니다. 하지만 SqlCommand.ExecuteReader()으로 실행하는 것이 유효합니다. 유일한 차이점은 DataReader.Read()에 대한 첫 번째 호출이 결과 집합을 반환하지 않는 저장 프로 시저에 대해 false을 반환한다는 것입니다.
  2. 행 집합SqlCommand.ExecuteReader()으로 실행됩니다. DataReader.Read()에 대한 첫 번째 호출은 true을 반환합니다.
  3. 스칼라은 하나의 열과 한 행이있는 행 집합의 바로 가기입니다.

따라서 세 가지 시나리오 모두에서 ExecuteReader을 사용할 수 있습니다.

질문에 불필요한 것처럼 보일 수도 있지만 fmtonly 옵션을 사용하면 결과 집합에 대한 메타 데이터를 검색 할 수 있습니다. 이 설정은 문이 열 정보 만 반환하도록합니다. 데이터 행이 리턴되지 않습니다. 그래서 당신은 실행할 수 있습니다 :

C 번호에서 CommandText으로이 실행
SET FMTONLY ON; 
EXEC dbo.YourProc @par1 = 1; 
SET FMTONLY OFF; 

, 당신은 저장 프로 시저가 반환 열 이름을 검사 할 수 있습니다.

은 부작용을 생성하지 않습니다 이런 식으로 실행 저장 프로 시저, 나는 다음과 같은 테스트 케이스를 실행되었는지 확인하려면 다음

create table table1 (id int) 
go 
create procedure YourProc(@par1 int) 
as 
insert into table1 (id) values (@par1) 
go 
SET FMTONLY ON; 
EXEC dbo.YourProc @par1 = 1; 
SET FMTONLY OFF; 
go 
select * from table1 

이 어떤 행을 반환하지 않았다. 따라서 포맷 전용 옵션은 실제 업데이트 나 삽입이 발생하지 않도록합니다.

관련 문제