Добрый день.
Есть такая задачка: подключится к sql серверу, прочитать в рекордсет таблицу, закрыть соединение с базой, и в дальнейшем в течении определенного периода читать данные из рекордсета. т.е. вроде кеширования получается. но возникла проблема, что когда закрывается соединение читать рекордсет уже нельзя. собственно вопрос можно ли так организовать загрузку данных в рекордсет, чтобы и после закрытия соединения его можно было использовать для чтения данных. подключаюсь и загружают в рекордсет так
_ConnectionPtr ptrConn("ADODB.Connection");
_RecordsetPtr ptrIPBlocksUrlsRs("ADODB.Recordset");
ptrConn->PutIsolationLevel(adXactCursorStability);
ptrConn->PutCursorLocation(adUseClient);
ptrConn->PutMode(adModeUnknown);
ptrConn->put_CommandTimeout(60);
ptrConn->PutProvider("SQLOLEDB.1");
if (ptrConn->Open("Data Source=Server; Initial Catalog=mydb; User ID=sa; Password=;", "", "", adConnectUnspecified) == S_OK){
ptrIPBlocksUrlsRs->Open(L"MyTable", (IDispatch*)ptrConn, adOpenStatic, adLockOptimistic, adCmdTable);
ptrConn->Close();
}
//вот тут уже получаю эксепшн
int rc = ptrIPBlocksUrlsRs->RecordCount;
Заранее благодарю.
Здравствуйте, Аноним, Вы писали:
А>Добрый день.
А>Есть такая задачка: подключится к sql серверу, прочитать в рекордсет таблицу, закрыть соединение с базой, и в дальнейшем в течении определенного периода читать данные из рекордсета. т.е. вроде кеширования получается. но возникла проблема, что когда закрывается соединение читать рекордсет уже нельзя. собственно вопрос можно ли так организовать загрузку данных в рекордсет, чтобы и после закрытия соединения его можно было использовать для чтения данных. подключаюсь и загружают в рекордсет так
А>А>_ConnectionPtr ptrConn("ADODB.Connection");
А>_RecordsetPtr ptrIPBlocksUrlsRs("ADODB.Recordset");
А>ptrConn->PutIsolationLevel(adXactCursorStability);
А>ptrConn->PutCursorLocation(adUseClient);
А>ptrConn->PutMode(adModeUnknown);
А>ptrConn->put_CommandTimeout(60);
А>ptrConn->PutProvider("SQLOLEDB.1");
А>if (ptrConn->Open("Data Source=Server; Initial Catalog=mydb; User ID=sa; Password=;", "", "", adConnectUnspecified) == S_OK){
А> ptrIPBlocksUrlsRs->Open(L"MyTable", (IDispatch*)ptrConn, adOpenStatic, adLockOptimistic, adCmdTable);
А> ptrConn->Close();
А>}
А>//вот тут уже получаю эксепшн
А>int rc = ptrIPBlocksUrlsRs->RecordCount;
А>
А>Заранее благодарю.
Можно, но рекордсет нужно скопировать, почитайте здесь
http://www.vbrad.com/article.aspx?id=12