A. The full errors for this problem are "Bad token from SQL Server" and "Datastream processing out of sync".
They are caused by the NO_BROWSETABLE undocumented option. As it is undocumented the error almost always occurs using ADO as it uses it without the programmer knowing about it.
It is caused when NO_BROWSETABLE is set and a SELECT operation includes one or more columns in an ORDER BY clause that are not in the SELECT list.
The problem is fixed in SP5 for SQL 6.5. It does not occur in SQL 7.0.
A script to show the problem from ISQL/W follows :-
SET NO_BROWSETABLE OFF
CREATE PROCEDURE my_sp AS
CREATE TABLE #t(a int)
INSERT #t VALUES(3)
SELECT * FROM #t
EXEC my_sp -- Goes OK.
SET NO_BROWSETABLE ON
EXEC my_sp -- Goes OK too.
EXEC my_sp WITH RECOMPILE -- Now, you're dead.