if you mean return the current progress while the query is executing on sql server
- i think there is no way, if you notice in sqlserver management studio while you are doing some huge select statements the management studio doesnt really returns the current progress of sql server but rather just a 'preloader' type of progress bar with no current progress on it.
but if you mean display progress after the query has been executed and is now ready to return the
results.
heres what i usually do
I get the total count of resulting query
then do some
Code:
while (reader.read())
{
record++
if(CurrentTickCountFunction() > tickcount + 1000)
{
tickcount = CurrentTickCountFunction()
UpdateProgressBar(record)
}
... do some stuff
}
UpdateProgressBar(record)
so basically the code will update the progress bar every 1 second (or what ever you like) while you are still reading the record.
i prefer doing the tickcount technique rather than some modulo solution
because it will always be constant on every computer regardless of its processing power.
if you wont be able to get the total count, then you should consider a different progress bar where it displays the total record reads-to-Unknown
usually i create the UpdateProgressBar() function as a delegate/ event so the form
using your class can subscribe to that event 
below is a tool i created to upload images to Imageshack servers, which displays the current progress but its in c#
RapidShare Webhosting + Webspace
similar concept: Big Data + progress bar