This type of timeout can have four causes:
  1. There's a deadlock somewhere with a SQL table on the database
  2. The database's statistics and/or query plan cache are incorrect
  3. The query is too complex and needs to be tuned
  4. The default timeout in the page codebase it too short and needs to be increased
1. A deadlock can be difficult to fix, but it's easy to determine whether that is the case. Connect to your database with SQL Server Management Studio. In the left pane right-click on the server node and select Activity Monitor. Take a look at the running processes. Normally most will be idle or running. When the problem occurs you can identify any blocked process by the process state. If you right-click on the process and select details it'll show you the last query executed by the process.

2. The second issue will cause the database to use a sub-optimal query plan. It can be resolved by clearing the statistics:

exec sp_updatestats

If that doesn't work you could also try

dbcc freeproccache

Note: You should not do this when your server is under heavy load because it will temporarily incur a big performance hit as all stored procedures and queries are recompiled when first executed. 

3. Execute the query being called in the page on SQL Server Management Studio (SSMS) and note the time to retrieve all results. Optimize the SQL query to reduce the amount of time taken to parse and return all data.

4. Update the affected page codebase to specify a long timeout value in the SQL call. The default timeout is normally 30 seconds. For example: 
// Setting the command timeout to 2 minutes
scGetruntotals.CommandTimeout = 120;
For more information on using the SQL command timeout, please review the following article from Microsoft. CommandTimeout Property

Note: We provide links to third-party websites in an effort to help you resolve your issue. We are not responsible for the information on third-party websites, and we cannot assist with implementing the resolution from these websites.