2011-03-16 2 views
0

데이터베이스 연결을 만들고 쿼리를 실행하는 메서드를 포함하여 모든 SQL 개체를 포함하는 클래스가 있습니다.CSharp : SQLConnection에서 SQL 선언/set 명령을 유지하려면 어떻게합니까?

다른 클래스에서

, 그 "데이터베이스"개체의 인스턴스를 생성하고 난 그 연결에 내 쿼리의 나머지 부분 설정 상태를 유지하고자하는 변수의 값을 설정하는 쿼리를 실행 :

DECLARE @InstitutionId NVARCHAR(MAX); 
SET @InstitutionId ='15'; 

위의 실행 후 같은 연결을 사용하여 해당 변수를 사용하는 다른 쿼리를 실행하지만 InstituionId를 설정해야한다는 오류가 반환됩니다.

두 번째 쿼리를 실행하면 첫 번째 쿼리의 결과가 손실 된 것처럼 보입니다. 어쨌든 위의 내용을 유지할 수 있습니까? 아니면 실행 한 각 쿼리에 Declare 및 Set 명령을 포함해야합니까? Microsoft SQL Server Management Studio에서이 작업을 수행 할 때만이 작업을 한 번 실행하면 내 쿼리 창에 모든 쿼리가 저장되므로 결과가 달라질 수 있습니다.

감사합니다,

제이슨

답변

0

아니, 쿼리의 범위는 조회 기간 동안 유효합니다. 예를 들어, 대부분의 SQL 연결 드라이버는 연결 풀에서 연결을 재사용하므로 SQL과 응용 프로그램에서 이전 쿼리와 어떤 쿼리가 일치하는지 추적 할 수 없습니다.

앱의 정확한 요구 사항에 따라 기관 ID을 데이터베이스 클래스의 구성원/속성으로 추가합니다. 데이터베이스 클래스는 각 요청에 대해 쿼리 매개 변수로 해당 멤버 값을 보내는 역할을합니다.

예 :

command.Parameters.AddWithValue("@InstitutionId",this.InstitutionId); 
+0

감사합니다. 나는 그것이 사실 일 것이라고 생각했습니다. – Jason

1

데이터베이스에 저장하는 것만으로 부족합니다. 명령문은 데이터베이스 연결이 아닌 상태를 보유합니다. 범위를 벗어나면 아무 것도 얻지 못합니다. 명령문의 끝에있는 'go'명령을 본질적으로 상상해보십시오.