using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Data.SqlClient;
using System.Web.Caching;

public partial class test_cache_sql_dep : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
		SqlConnection cx = new SqlConnection();
		cx.ConnectionString = ConfigurationManager.ConnectionStrings["banca"].ConnectionString;

		if (!IsPostBack)
		{
			// Le code suivant peut aussi figurer dans le Application_Start
			// mais pour les tests il est plus pratique 
			// de l'intégrer à la page

			// démarre l'écoute des notifications SQL
			SqlDependency.Start(cx.ConnectionString);

			// pour les tests, s'assure que la donnée
			// n'est pas présente dans le cache
			if(Cache["ds"]!=null)
				Cache.Remove("ds");
		}

		Label1.Text = "";
		DataSet ds;
		ds = (DataSet)Cache["ds"];
		if (ds == null)
		{
			SqlCommand cmd = new SqlCommand("select * from compte", cx);
			SqlDataAdapter da = new SqlDataAdapter(cmd);

			// attention à l'ordre des instructions suivantes
			ds = new DataSet();
			da.Fill(ds, "compte");

			SqlCacheDependency dep = new SqlCacheDependency("banca","compte");
			
			Label1.Text = "Relecture de la table: " + dep.HasChanged + " " + dep.UtcLastModified;

			Cache.Add("ds", ds, 
				dep, 
				Cache.NoAbsoluteExpiration,
				Cache.NoSlidingExpiration, 
				CacheItemPriority.Normal, null);
		}

		GridView1.DataSource = ds;
		GridView1.DataBind();
    }
}
