I recently implemented MiniProfiler into an existing ASP.NET WebForms application that makes use of data binding to the SqlDataSource control. Since the SqlDataSource uses a DbProviderFactory internally, it is fairly simple to extend the control to utilize MiniProfiler through inheritance and overriding a single method of the SqlDataSource.

Here’s a very simple class that inherits from the SqlDataSource control and injects MiniProfiler support to be able to profile the SQL query used by the control:

public class ProfiledSqlDataSource : SqlDataSource
{
    protected override DbProviderFactory GetDbProviderFactory()
    {
        // get the "base" DbProviderFactory
        var baseDbProviderFactory = base.GetDbProviderFactory();
        // Return a ProfiledDbProviderFactory from MiniProfiler
        // that wraps the "base" DbProviderFactory
        return new ProfiledDbProviderFactory(
            MiniProfiler.Current,
            baseDbProviderFactory
        );
    }
}