Have a strange problem where the tempdb space is shrinking when I select
a record using MFC CRecordset (actually a class derived from CRecordset).
These are the steps I perform:
1. Instantiate a CDatabase object.
2. Perform CDatabase.Open()
3. 'new' my CRecordset object by passing a pointer to the CDatabase
object (created in Step 2.)
4. Format a Query which looks like:
"SELECT * FROM TableName WHERE UniqueIndexedColumn = SearchVal"
5. Open() the Recordset as a "snapshot" with the Query; Options param.
set to CRecordset::none (which amounts to Edit/Delete)
6. Grab the data in the first row and then ....
7. Perform CRecordset.Close()
8. 'delete' the CRecordset object.
Note: All the appropriate error checking is being performed.....
I beleive in the "Server Side Cursors" implementation, the keyset for the
records generated by the query are stored in tempdb. But it does not
seem to get released after I perform CRecordset.Close() followed by the
delete of the CRecordset object.
In my experiments, I found the Open() "ing" & Close() "ing" of the
CDatabase object after getting rid of the CRecordset object seems to
drastically reduce the Shrinkage but is VERY EXPENSIVE & slows down
Interestingly enough, this (Shrinking tempdb) phenomenon occurs even
if the table being queried is EMPTY !!.
Would really appreciate any kind of workaround/patch/info in this matter.
MFC++ Ver.: 4.2
SQLServer Version: 6.5
ODBC Driver: SQLSRV32.DLL;
Size: 211,968 bytes.
Thanks in advance !!