Sunday, August 24, 2008

ASP.Net and Data Source Controls

In an ASP.Net page, many asp controls can be bound with a data source control, such as SqlDataSource and ObjectDataSource. I prefer to use ObjectDataSource than SqlDataSource. Here are my two main reasons.

First SqlDataSource includes a SQL statement in the control. If you change different data DB source from Microsoft SQL to Oracle DB, the SQL statement may be different. Therefore, you may have to make change in the UI aspx page or server side .Net class codes.

ObjectDataSource is binding data source from a a class's methods to get or update data. The class hides the way how data are retrieved or saved. I call it as business logic layer class (BLL). The class can be defined in another library assembly. This will make unit test much easier.

Second reason is that you don't have control how many times to call SqlDataSource to get data. For example, if you have a combo box in a GridView for product types and link it to a SqlDataSource to get product types. Each combo box will call the SqlDataSource to get product types when GridView is initialized. If there are tens or hundreds of rows in the GridView, there will be tens or hundreds call to database to get the same data. Even worse, in case of post-back calls, the GridView will be refreshed again. This may make the front UI very slow if the retrieving data process is slow.

In BLL class, you can easily cache data to avoid unnecessary calls to database. Simple define your data collection as a static List in the class. Only the first time when the page is initialized the static data member is populated with data from database. The subsequent calls will get data from the cache. You may need to define a reset method in the BLL class so that in the Page_Load event, if it is not post-back call, call this reset method to reset the static member to null. Then when the GridView is initialized, the data will be obtained from database for the first time.