Bagikan melalui


SqlDependency dalam aplikasi ASP.NET

Mengunduh ADO.NET

Contoh di bagian ini menunjukkan cara menggunakan SqlDependency secara tidak langsung dengan menggunakan objek ASP.NET SqlCacheDependency . Objek SqlCacheDependency menggunakan SqlDependency untuk mendengarkan pemberitahuan dan memperbarui tembolok dengan benar.

Catatan

Kode sampel mengasumsikan bahwa Anda telah mengaktifkan pemberitahuan kueri dengan menjalankan skrip dalam Mengaktifkan pemberitahuan kueri.

Tentang aplikasi sampel

Aplikasi sampel menggunakan halaman Web ASP.NET tunggal untuk menampilkan informasi produk dari database SQL Server AdventureWorks dalam kontrol GridView. Saat laman dimuat, kode menulis waktu saat ini ke kontrol Label. Ini kemudian mendefinisikan objek SqlCacheDependency dan menyetel properti pada objek Cache untuk menyimpan data cache hingga tiga menit. Kode kemudian terhubung ke database dan mengambil data. Ketika halaman dimuat dan aplikasi berjalan ASP.NET akan mengambil data dari cache, yang dapat Anda verifikasi dengan mencatat bahwa waktu di halaman tidak berubah. Jika data yang dipantau berubah, ASP.NET membatalkan cache dan mengisi ulang GridView kontrol dengan data baru, memperbarui waktu yang ditampilkan dalam Label kontrol.

Membuat aplikasi sampel

Ikuti langkah-langkah ini untuk membuat dan menjalankan aplikasi contoh:

  1. Buat situs Web ASP.NET baru.

  2. Tambahkan kontrol Label dan GridView ke halaman Default.aspx.

  3. Buka modul kelas halaman dan tambahkan direktif berikut:

    using Microsoft.Data.SqlClient;
    using System.Web.Caching;
    
  4. Tambahkan kode berikut di peristiwa Page_Loadhalaman:

    // using Microsoft.Data.SqlClient;
    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "Cache Refresh: " +
        DateTime.Now.ToLongTimeString();
    
        // Create a dependency connection to the database.
        SqlDependency.Start(GetConnectionString());
    
        using (SqlConnection connection =
            new SqlConnection(GetConnectionString()))
        {
            using (SqlCommand command =
                new SqlCommand(GetSQL(), connection))
            {
                SqlCacheDependency dependency =
                    new SqlCacheDependency(command);
                // Refresh the cache after the number of minutes
                // listed below if a change does not occur.
                // This value could be stored in a configuration file.
                int numberOfMinutes = 3;
                DateTime expires =
                    DateTime.Now.AddMinutes(numberOfMinutes);
    
                Response.Cache.SetExpires(expires);
                Response.Cache.SetCacheability(HttpCacheability.Public);
                Response.Cache.SetValidUntilExpires(true);
    
                Response.AddCacheDependency(dependency);
    
                connection.Open();
    
                GridView1.DataSource = command.ExecuteReader();
                GridView1.DataBind();
            }
        }
    }
    
  5. Tambahkan dua metode pembantu, GetConnectionString dan GetSQL. String koneksi yang ditentukan menggunakan keamanan terintegrasi. Verifikasi bahwa akun yang Anda gunakan memiliki izin database yang diperlukan dan bahwa database sampel, AdventureWorks, mengaktifkan pemberitahuan.

    // using Microsoft.Data.SqlClient;
    private string GetConnectionString()
    {
        // To avoid storing the connection string in your code,
        // you can retrieve it from a configuration file.
        return "Data Source=(local);Integrated Security=true;" +
          "Initial Catalog=AdventureWorks;";
    }
    private string GetSQL()
    {
        return "SELECT Production.Product.ProductID, " +
        "Production.Product.Name, " +
        "Production.Location.Name AS Location, " +
        "Production.ProductInventory.Quantity " +
        "FROM Production.Product INNER JOIN " +
        "Production.ProductInventory " +
        "ON Production.Product.ProductID = " +
        "Production.ProductInventory.ProductID " +
        "INNER JOIN Production.Location " +
        "ON Production.ProductInventory.LocationID = " +
        "Production.Location.LocationID " +
        "WHERE ( Production.ProductInventory.Quantity <= 100 ) " +
        "ORDER BY Production.ProductInventory.Quantity, " +
        "Production.Product.Name;";
    }
    

Menguji aplikasi

Aplikasi ini menyimpan data yang ditampilkan pada formulir Web dan menyegarkannya setiap tiga menit jika tidak ada aktivitas. Jika terjadi perubahan pada database, cache segera di-refresh. Jalankan aplikasi dari Visual Studio, yang memuat halaman ke dalam browser. Waktu refresh cache yang ditampilkan menunjukkan kapan cache terakhir kali di-refresh. Tunggu tiga menit, lalu segarkan halaman, menyebabkan peristiwa postback terjadi. Waktu yang ditampilkan pada halaman telah berubah. Jika Anda me-refresh halaman dalam waktu kurang dari tiga menit, waktu yang ditampilkan pada halaman akan tetap sama.

Sekarang perbarui data dalam database menggunakan perintah TRANSACT-SQL UPDATE dan refresh halaman. Waktu yang ditampilkan sekarang menunjukkan cache disegarkan dengan data baru dari database. Meskipun cache diperbarui, waktu yang ditampilkan di halaman tidak berubah hingga peristiwa postback terjadi.

Langkah berikutnya