Здравствуйте, Alex_VC, Вы писали:
1. ADO открывает дополнительный коннект в том случае, если у вас есть недофетченная
выборка серверного курсора и вы пытаетесь сделать что-нибудь еще.
Потом он ессно уносить вместе с собой и #t
Пример.
int main(){
_bstr_t ConnStr = "Provider=SQLOLEDB; \
Data Source=(local); \
Initial Catalog=pubs; \
Integrated Security=SSPI";
_ConnectionPtr adoConn;
try {
adoConn.CreateInstance(__uuidof(Connection));
adoConn->CommandTimeout = 300;
adoConn->CursorLocation = adUseServer;
// adoConn->CursorLocation = adUseClient;
adoConn->IsolationLevel = adXactReadCommitted;
adoConn->Attributes = 0;
adoConn->Open(ConnStr,"","",adConnectUnspecified);
_bstr_t SQL;
SQL = "select * from sysobjects";
_RecordsetPtr adoRSTmp = adoConn->Execute(SQL,0,adOptionUnspecified);
// while(! adoRSTmp->adoEOF)adoRSTmp->MoveNext();
//// adoRSTmp->Close();
SQL = "create table #t(A varchar(30))";
adoConn->Execute(SQL,0,adOptionUnspecified);
SQL = "insert into #t select au_id from authors";
adoConn->Execute(SQL,0,adOptionUnspecified);
SQL = "select * from #t";
_RecordsetPtr adoRS = adoConn->Execute(SQL,0,adOptionUnspecified);
_bstr_t b;
while(! adoRS->adoEOF){
b = adoRS->Fields->Item[0L]->Value;
MessageBoxW(0, b, L"", 0);
adoRS->MoveNext();
}
adoRS->Close();
...
При adoConn->CursorLocation = adUseClient все нормально
При adoConn->CursorLocation = adUseServer нужно или закрыть rs или его дофетчить