Please see the following post for information on how to duplicate the functionality in ADO.NET:
http://groups.google.com/group/microsoft.public.dotnet.framework.adonet/msg/828ef64c6aa6e846?hl=en... However, please note that ADO and ADO.NET data access patterns are not really the same, and the performance benefits of GetRows may not carry over as much to the ADO.NET world. I have used this technique in ADO.NET with pretty good success when I needed to pull data back into an array for caching, but if you don't need to reuse the data you might find that this is overkill. In addition, I should note that I used this technique in a ADO.NET 1.1 project. It may not apply at all in 2.0, due to the great performance improvements the ADO.NET team made.
For tips on ADO.NET performance, see:
http://msdn.microsoft.com/msdnmag/issues/05/05/DataPoints/default.aspxand
http://www.theserverside.net/tt/articles/showarticle.tss?id=OptimizingADONET
Looking for an advanced SQL Server 2005 book?
Expert SQL Server 2005 Development