Local lnMethod As Number Local lcSql As String Local lcXml As String Local loConn As ADODB.Connection Local loRs As ADODB.Recordset Local loCmd As ADODB.Command Local loStr As ADODB.Stream lnMethod = 3 lcXml = '' lcSql = "<large query>" loConn = CreateObject('ADODB.Connection') loRs = CreateObject('ADODB.Recordset') loCmd = CreateObject('ADODB.Command') loStr = CreateObject('ADODB.Stream') ?'Method: ', lnMethod DO Case Case lnMethod = 1 && our first method loConn.Open('DSN=;UID=;PWD=') With loRs .ActiveConnection = loConn .CursorLocation = 3 && adUseClient .CursorType = 0 && adOpenForwardOnly .LockType = 1 && adLockReadOnly lnSec = Seconds() .Open(lcSql) ?'Execute: ', Seconds() - lnSec lnSec = Seconds() Do While !.Eof lcXml = lcXml + .Fields(0).Value .MoveNext() EndDo ?'String: ', Seconds() - lnSec EndWith Case lnMethod = 2 loConn.Open('DSN=;UID=;PWD=') With loRs .ActiveConnection = loConn .CursorLocation = 3 && adUseClient .CursorType = 0 && adOpenForwardOnly .LockType = 1 && adLockReadOnly lnSec = Seconds() loRs.Open(lcSql) ?'Execute: ', Seconds() - lnSec lnSec = Seconds() lcXml = .GetString() ?'String: ', Seconds() - lnSec EndWith Case lnMethod = 3 loConn.Open('PROVIDER=SQLOLEDB.1;DATA SOURCE=;DATABASE=;UID=;PWD=') loStr.Open() With loCmd .ActiveConnection = loConn .CommandText = lcSql .Properties("Output Stream") = loStr lnSec = Seconds() .Execute(,,1024) ?'Execute: ', Seconds() - lnSec EndWith lnSec = Seconds() lcXml = loStr.ReadText() ?'String: ', Seconds() - lnSec EndCase ?''