Visual Studio and its underlying data engine, ADO.NET support only one mode: disconnected access to data. An ADO.NET data set is always pre-fetched in its entirety from the server to the client. Since it is often not practical to pre-fetch large data sets over the wire, this creates two serious problems:
- Even distributed Web applications often include large data sets, such as, for example, a list of available products and other data originated in database tables with thousands records and more. It is very inefficient and in many cases impossible to transfer such data from server to the client in its entirety. This forces developers to produce makeshift solutions (such as asking the user to enter a few initial letters of the product name before showing the list of products) severely reducing the quality of end user experience, application performance and scalability.
- The absence of large data set support makes it effectively impossible to develop classic client-server and desktop database applications in Visual Studio without DataObjects for .NET. A popular belief is that you only need large data sets if you have not designed your application correctly. This is a misconception. The real problem is the lack of tools supporting the right data access modes. Another popular misconception is that disconnected model (also referred to, somewhat loosely, as "Web application", "3-tier application", and so on) necessarily means pre-fetching all the data from the server to the client at once, that any other approach is necessarily the old "live connection per user" that is not scalable.
DataObjects for .NET fills this gap, offering a solution to the problem of large data sets. It gives you the tool to achieve the best of both worlds, to have data access that is both disconnected (no live connection is maintained on the server for particular users) and therefore scalable, and at the same time, unlimited in data size.
To use a large data set in DataObjects for .NET is as easy as to set a property, DataAccessMode (you also need to use C1DataTableSource as your data source if you need to bind GUI controls in virtual mode, see Using C1DataTableSource and Bound Controls).