2009-11-04 2 views
0

는, 내가 선언 :왜 Odbc 리더 인스턴스가 필요하지만 Odbc 연결이 필요합니까? 클래스 수준에

System::Data::Odbc::OdbcConnection conn; 
System::Data::Odbc::OdbcDataReader datareader; //doesnt work 
System::Data::Odbc::OdbcDataReader^ datareader; //works 

그러나, dataReaderOdbcDataReader^로 선언되어야한다. 이유는 모르겠다.

연결 및 DataReader를 클래스가 사용하는 데이터베이스 기술에 따라,은 .NET Framework에 쌍으로이 간다 여기에 귀하의 질문에 대한 대답하지만, 경우

답변

0

OdbcConnection conn;을 사용하면 스택 개체를 직접 인스턴스화합니다. 그게 좋은 생각인지는 모르겠지만 가능합니다.

OdbcDataReader datareader;은 숨겨진 (개인/내부) 생성자 만 있기 때문에 OdbcDataReader datareader;으로는이 작업을 수행 할 수 없습니다. 즉, 의도적으로 DataReaders를 직접 생성하지 말고 대신 ExecuteReader()을 호출해야합니다. ExecuteReader는 OdbcDataReader^을 반환합니다. MSDN을 참조하십시오.

+0

많은 메소드가이를 공유하고 다른 클래스에 매개 변수로 전달되기 때문에 직접 연결을 인스턴스화해야합니다. – Petr

+0

Petr, 연결을 공유해야한다면 아마도 참조 (관리 된 포인터)를 원할 것입니다. –

+0

이 답변의 두 번째 항목은 도움이됩니다. 첫 번째 항목은 실제로 부정확합니다. 구문 상 나타나는 경우에도 인스턴스는 스택에 생성되지 않고 관리되는 힙에 남아 있습니다. 범위가 끝나면 결정적으로 처리된다는 것입니다. – tragomaskhalos

0

는 잘 모르겠어요. 따라서 OdbcConnectionOdbcDataReader, SqlConnectionSqlDataReader 등이 있습니다. 항상 쌍으로 사용해야합니다. 어쨌든 이들 모두 공통 인터페이스 IDataConnectionIDataReader을 구현한다는 점에 유의하십시오.

편집. 좋아, 나는 그 질문을 완전히 오해했다. : -/

나는 일반적으로 C#을하지 C++를 사용하지만, 난 당신이 직접 OdbcConnection의 새 인스턴스를 만들 수 있기 때문이라고 생각하지만, OdbcDataReader에 관해서는, 당신은에 ExecuteReader 방법을 실행하여 인스턴스를 얻어야합니다 해당 OdbcCommand. ExecuteReader는 새 OdbcDataReader 개체에 대한 포인터를 반환합니다.

+0

고마워요,하지만 내 질문에 왜 OdbccDataReader를 사용해야하는 동안 odbcconnection과 함께 핸들을 사용해야합니까 ^? – Petr