SQL Server 데이터베이스 (삽입, 편집 등)에서 작업을 실행하고 Stored Procs를 호출 할 수 있도록 Windows 서비스를 만들고 있습니다.C에서 호출 할 때 저장된 프로 시저 유형을 아는 경우
그러나 SP의 유형을 알 수있는 방법이 있습니까? C#에서 호출 할 때, 1 값 이상을 리턴하는지, 아니면 아무것도 반환하지 않으면 knof가 필요합니다 (executereader, scalar 등을 사용할 수 있습니까?)?
감사
SQL Server 데이터베이스 (삽입, 편집 등)에서 작업을 실행하고 Stored Procs를 호출 할 수 있도록 Windows 서비스를 만들고 있습니다.C에서 호출 할 때 저장된 프로 시저 유형을 아는 경우
그러나 SP의 유형을 알 수있는 방법이 있습니까? C#에서 호출 할 때, 1 값 이상을 리턴하는지, 아니면 아무것도 반환하지 않으면 knof가 필요합니다 (executereader, scalar 등을 사용할 수 있습니까?)?
감사
SqlCommand.ExecuteNonQuery()
호출합니다. 하지만 SqlCommand.ExecuteReader()
으로 실행하는 것이 유효합니다. 유일한 차이점은 DataReader.Read()
에 대한 첫 번째 호출이 결과 집합을 반환하지 않는 저장 프로 시저에 대해 false
을 반환한다는 것입니다.SqlCommand.ExecuteReader()
으로 실행됩니다. DataReader.Read()
에 대한 첫 번째 호출은 true
을 반환합니다.따라서 세 가지 시나리오 모두에서 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
이 어떤 행을 반환하지 않았다. 따라서 포맷 전용 옵션은 실제 업데이트 나 삽입이 발생하지 않도록합니다.