SqlCacheDependency, propriété

ObjectDataSource.SqlCacheDependency, propriété

Remarque : cette propriété est nouvelle dans le .NET Framework version 2.0.

Obtient ou définit une chaîne délimitée par des points-virgules qui indique les bases de données et les tables à utiliser pour la dépendance de cache Microsoft SQL Server.

Espace de noms : System.Web.UI.WebControls
Assembly : System.Web (dans system.web.dll)

public virtual string SqlCacheDependency { get; set; }
/** @property */
public String get_SqlCacheDependency ()

/** @property */
public void set_SqlCacheDependency (String value)

public function get SqlCacheDependency () : String

public function set SqlCacheDependency (value : String)

Valeur de la propriété

Chaîne qui indique les bases de données et les tables à utiliser pour la dépendance de cache SQL Server.

Le contrôle ObjectDataSource prend en charge une stratégie d'expiration facultative basée sur l'objet SqlCacheDependency pour le cache de données (le service doit être configuré pour le serveur de base de données).

SQL Server prend en charge deux mécanismes pour l'invalidation du cache : l'interrogation et la notification. Chacun possède une syntaxe différente pour l'objet SqlCacheDependency.

ObjectDataSource ne prend en charge que l'interrogation. La chaîne SqlCacheDependency est utilisée pour créer un objet SqlDependency qui est passé au constructeur DbCommand avant l'exécution de la méthode Select. La chaîne SqlCacheDependency identifie les bases de données et les tables d'après le même format que celui utilisé par la directive @ Page, où la première partie de la chaîne est une chaîne de connexion à une base de données SQL Server, délimitée par des deux-points et suivie du nom de la table de base de données (par exemple, "connectionstring1:table1"). Si la propriété SqlCacheDependency dépend de plusieurs tables, les paires de noms de chaîne de connexion et de table sont séparées par des points-virgules (par exemple, "connectionstring1:table1";connectionstring2:table2").

Pour prendre en charge la notification, vous devez écrire la logique du cache dans l'implémentation de votre méthode SelectMethod et gérer la construction de l'objet SqlCacheDependency dans votre code.

Cette section comprend deux exemples de code. Le premier exemple de code illustre comment créer une dépendance de cache SQL Server et définir la propriété SqlCacheDependency d'un objet ObjectDataSource. Le deuxième exemple de code illustre comment implémenter une méthode de wrapper qui retourne un objet DataSet pour activer la mise en cache et le filtrage avec un objet ObjectDataSource.

L'exemple de code suivant illustre comment créer une dépendance de cache SQL Server et définir la propriété SqlCacheDependency d'un contrôle ObjectDataSource. Dans cet exemple, la base de données est interrogée toutes les 120 secondes. Si les données de la table Northwind Traders Employees changent pendant cette période, toutes les données mises en cache par le contrôle ObjectDataSource et affichées par le contrôle GridView sont expirées et un nouveau groupe de données est récupéré sur la demande suivante pour la page.

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS" Assembly="Samples.AspNet.CS" %>
<%@ Page language="c#" %>

<!--
The page uses an example configuration that includes
connection strings and a defined SqlCacheDependecy.

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <add name="MyNorthwind"
         connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <cache>
      <sqlCacheDependency enabled="true">
        <databases>
          <add
            name="Northwind"
            connectionStringName="MyNorthwind"
            pollTime="120000" />
        </databases>
      </sqlCacheDependency>
    </cache>

  </system.web>
</configuration>
-->



<html>
  <head>
    <title>ObjectDataSource - C# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          typename="Samples.AspNet.CS.EmployeeLogic"
          selectmethod="GetAllEmployeesAsDataSet"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind:Employees" />

    </form>
  </body>
</html>

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.JSL" Assembly="Samples.AspNet.JSL" %>
<%@ Page language="VJ#" %>

<!--

The page uses an example configuration that includes
connection strings and a defined SqlCacheDependecy.

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <add name = "NorthwindConnection" connectionString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind" />
  </connectionStrings>

  <system.web>

    ...

    <cache>
      <sqlCacheDependency enabled="true">
        <databases>
          <add
            name="Northwind_Remote"
            connectionStringName="NorthwindConnection"
            pollTime="120000" />
        </databases>
      </sqlCacheDependency>
    </cache>

  </system.web>
</configuration>
-->



<html>
  <head>
    <title>ObjectDataSource - VJ# Example</title>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">

        <asp:gridview
          id="GridView1"
          runat="server"
          datasourceid="ObjectDataSource1" />

        <asp:objectdatasource
          id="ObjectDataSource1"
          runat="server"
          typename="Samples.AspNet.JSL.EmployeeLogic"
          selectmethod="GetAllEmployeesAsDataSet"
          enablecaching="True"
          cacheduration="300"
          cacheexpirationpolicy="Absolute"
          sqlcachedependency="Northwind_Remote:Employees" />

    </form>
  </body>
</html>

L'exemple de code suivant illustre comment implémenter une méthode de wrapper qui retourne un objet DataSet pour activer la mise en cache et le filtrage avec un contrôle ObjectDataSource. Dans l'implémentation de base de la classe EmployeeLogic, la méthode GetAllEmployees retourne un objet ArrayList. Au lieu de refactoriser complètement l'objet de façon à ce qu'il fonctionne avec ObjectDataSource sur une page Web Forms, une méthode de wrapper nommée GetAllEmployeesAsDataSet est ajoutée et retourne un jeu de données NorthwindEmployee comme DataSet.

namespace Samples.AspNet.CS {

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
  //
  // EmployeeLogic is a stateless business object that encapsulates
  // the operations one can perform on a NorthwindEmployee object.
  //
  public class EmployeeLogic {

    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees () {
      ArrayList al = new ArrayList();

      ConnectionStringSettings cts = ConfigurationManager.ConnectionStrings["NorthwindConnection"];

      SqlDataSource sds
        = new SqlDataSource(cts.ConnectionString,
                            "SELECT EmployeeID FROM Employees");
      try {
        IEnumerable IDs = sds.Select(DataSourceSelectArguments.Empty);

        // Iterate through the Enumeration and create a
        // NorthwindEmployee object for each ID.
        IEnumerator enumerator = IDs.GetEnumerator();
        while (enumerator.MoveNext()) {
          // The IEnumerable contains DataRowView objects.
          DataRowView row = enumerator.Current as DataRowView;
          string id = row["EmployeeID"].ToString();
          NorthwindEmployee nwe = new NorthwindEmployee(id);
          // Add the NorthwindEmployee object to the collection.
          al.Add(nwe);
        }
      }
      finally {
        // If anything strange happens, clean up.
        sds.Dispose();
      }

      return al;
    }

    //
    // To support basic filtering, the employees cannot
    // be returned as an array of objects, rather as a
    // DataSet of the raw data values.
    public static DataSet GetAllEmployeesAsDataSet () {
      ICollection employees = GetAllEmployees();

      DataSet ds = new DataSet("Table");

      // Create the schema of the DataTable.
      DataTable dt = new DataTable();
      DataColumn dc;
      dc = new DataColumn("FirstName", typeof(string)); dt.Columns.Add(dc);
      dc = new DataColumn("LastName",  typeof(string)); dt.Columns.Add(dc);
      dc = new DataColumn("Title",     typeof(string)); dt.Columns.Add(dc);
      dc = new DataColumn("Courtesy",  typeof(string)); dt.Columns.Add(dc);
      dc = new DataColumn("Supervisor",typeof(Int32));  dt.Columns.Add(dc);

      // Add rows to the DataTable.
      IEnumerator emplEnum = employees.GetEnumerator();
      DataRow row;
      NorthwindEmployee ne;
      while (emplEnum.MoveNext()) {
        ne = emplEnum.Current as NorthwindEmployee;
        row = dt.NewRow();
        row["FirstName"]  = ne.FirstName;
        row["LastName"]   = ne.LastName;
        row["Title"]      = ne.Title;
        row["Courtesy"]   = ne.Courtesy;
        row["Supervisor"] = ne.Supervisor;
        dt.Rows.Add(row);
      }
      // Add the complete DataTable to the DataSet.
      ds.Tables.Add(dt);

      return ds;
    }
    public static NorthwindEmployee GetEmployee(object anID) {
      if (anID.Equals("-1") ||
          anID.Equals(DBNull.Value) ) {
        return new NorthwindEmployee();
      }
      else {
        return new NorthwindEmployee(anID);
      }
    }

    public static void UpdateEmployeeInfo(NorthwindEmployee ne) {
      bool retval = ne.Save();
      if (! retval) { throw new NorthwindDataException("UpdateEmployee failed."); }
    }

    public static void DeleteEmployee(NorthwindEmployee ne) {
      bool retval = ne.Delete();
      if (! retval) { throw new NorthwindDataException("DeleteEmployee failed."); }
    }
  }

  public class NorthwindEmployee {

    public NorthwindEmployee () {
      ID = DBNull.Value;
      lastName = "";
      firstName = "";
      title="";
      titleOfCourtesy = "";
      reportsTo = -1;
    }

    public NorthwindEmployee (object anID) {
      this.ID = anID;

      SqlConnection conn
        = new SqlConnection (ConfigurationManager.ConnectionStrings["NorthwindConnection"].ConnectionString);
      SqlCommand sc =
        new SqlCommand(" SELECT FirstName,LastName,Title,TitleOfCourtesy,ReportsTo " +
                       " FROM Employees " +
                       " WHERE EmployeeID = @empId",
                       conn);
      // Add the employee ID parameter and set its value.
      sc.Parameters.Add(new SqlParameter("@empId",SqlDbType.Int)).Value = Int32.Parse(anID.ToString());
      SqlDataReader sdr = null;

      try {
        conn.Open();
        sdr = sc.ExecuteReader();

        // Only loop once.
        if (sdr != null && sdr.Read()) {
          // The IEnumerable contains DataRowView objects.
          this.firstName        = sdr["FirstName"].ToString();
          this.lastName         = sdr["LastName"].ToString();
          this.title            = sdr["Title"].ToString();
          this.titleOfCourtesy  = sdr["TitleOfCourtesy"].ToString();
          if (! sdr.IsDBNull(4)) {
            this.reportsTo        = sdr.GetInt32(4);
          }
        }
        else {
          throw new NorthwindDataException("Data not loaded for employee id.");
        }
      }
      finally {
        try {
          if (sdr != null) sdr.Close();
          conn.Close();
        }
        catch (SqlException) {
          // Log an event in the Application Event Log.
          throw;
        }
      }
    }

    private object ID;
    public string EmpID {
      get { return ID.ToString();  }
    }

    private string lastName;
    public string LastName {
      get { return lastName; }
      set { lastName = value; }
    }

    private string firstName;
    public string FirstName {
      get { return firstName; }
      set { firstName = value;  }
    }

    public string FullName {
      get { return FirstName + " " + LastName; }
    }

    private string title;
    public String Title {
      get { return title; }
      set { title = value; }
    }

    private string titleOfCourtesy;
    public string Courtesy {
      get { return titleOfCourtesy; }
      set { titleOfCourtesy = value; }
    }

    private int    reportsTo;
    public int Supervisor {
      get { return reportsTo; }
      set { reportsTo = value; }
    }

    public bool Save () {
      // Implement persistence logic.
      return true;
    }

    public bool Delete () {
      // Implement delete logic.
      return true;
    }
  }

  internal class NorthwindDataException: Exception {
    public NorthwindDataException(string msg) : base (msg) { }
  }
}

package Samples.AspNet.JSL;

import System.*;
import System.Collections.*;
import System.Configuration.*;
import System.Data.*;
import System.Data.SqlClient.*;
import System.Web.UI.*;
import System.Web.UI.WebControls.*;

//
// EmployeeLogic is a stateless business object that encapsulates
// the operations one can perform on a NorthwindEmployee object.
//
public class EmployeeLogic
{
    // Returns a collection of NorthwindEmployee objects.
    public static ICollection GetAllEmployees() throws NorthwindDataException
    {
        ArrayList al = new ArrayList();

		ConnectionStringSettings cts =
			ConfigurationManager.get_ConnectionStrings().get_Item("NorthwindConnection");

        SqlDataSource sds = new SqlDataSource(cts.get_ConnectionString(),
            "SELECT EmployeeID FROM Employees");
        try {
            IEnumerable ids = sds.Select(DataSourceSelectArguments.get_Empty());
            // Iterate through the Enumeration and create a
            // NorthwindEmployee object for each ID.
            IEnumerator enumerator = ids.GetEnumerator();
            while (enumerator.MoveNext()) {
                // The IEnumerable contains DataRowView objects.
                DataRowView row = (DataRowView)enumerator.get_Current();
                String idObj = row.get_Item("EmployeeID").ToString();
                NorthwindEmployee nwe = new NorthwindEmployee(idObj);
                // Add the NorthwindEmployee object to the collection.
                al.Add(nwe);
            }
        }
        finally {
            // If anything strange happens, clean up.
            sds.Dispose();
        }
        return al;
    } //GetAllEmployees

    //
    // To support basic filtering, the employees cannot
    // be returned as an array of objects, rather as a
    // DataSet of the raw data values.
    public static DataSet GetAllEmployeesAsDataSet() throws NorthwindDataException
    {
        ICollection employees = GetAllEmployees();

        DataSet ds = new DataSet("Table");
        // Create the schema of the DataTable.
        DataTable dt = new DataTable();
        DataColumn dc;
        dc = new DataColumn("FirstName", String.class.ToType());
        dt.get_Columns().Add(dc);
        dc = new DataColumn("LastName", String.class.ToType());
        dt.get_Columns().Add(dc);
        dc = new DataColumn("Title", String.class.ToType());
        dt.get_Columns().Add(dc);
        dc = new DataColumn("Courtesy", String.class.ToType());
        dt.get_Columns().Add(dc);
        dc = new DataColumn("Supervisor", Int32.class.ToType());
        dt.get_Columns().Add(dc);
        // Add rows to the DataTable.
        IEnumerator emplEnum = employees.GetEnumerator();
        DataRow row;
        NorthwindEmployee ne;
        while (emplEnum.MoveNext()) {
            ne = (NorthwindEmployee)emplEnum.get_Current();
            row = dt.NewRow();
            row.set_Item("FirstName", ne.get_FirstName());
            row.set_Item("LastName", ne.get_LastName());
            row.set_Item("Title", ne.get_Title());
            row.set_Item("Courtesy", ne.get_Courtesy());
            row.set_Item("Supervisor", (Int32)ne.get_Supervisor());
            dt.get_Rows().Add(row);
        }
        // Add the complete DataTable to the DataSet.
        ds.get_Tables().Add(dt);

        return ds;
    } //GetAllEmployeesAsDataSet

    public static NorthwindEmployee GetEmployee(Object anID)
        throws NorthwindDataException
    {
        if (anID.Equals("-1") || anID.Equals(DBNull.Value)) {
            return new NorthwindEmployee();
        }
        else {
            return new NorthwindEmployee(anID);
        }
    } //GetEmployee

    public static void UpdateEmployeeInfo(NorthwindEmployee ne)
        throws NorthwindDataException
    {
        boolean retVal = ne.Save();
        if (!(retVal)) {
            throw new NorthwindDataException("UpdateEmployee failed.");
        }
    } //UpdateEmployeeInfo

    public static void DeleteEmployee(NorthwindEmployee ne)
        throws NorthwindDataException
    {
        boolean retVal = ne.Delete();
        if (!(retVal)) {
            throw new NorthwindDataException("DeleteEmployee failed.");
        }
    } //DeleteEmployee
} //EmployeeLogic

public class NorthwindEmployee
{
    public NorthwindEmployee()
    {
        id = DBNull.Value;
        lastName = "";
        firstName = "";
        title = "";
        titleOfCourtesy = "";
        reportsTo = -1;
    } //NorthwindEmployee

    public NorthwindEmployee(Object anID) throws NorthwindDataException
    {
        this.id = anID;

		SqlConnection conn = new SqlConnection(ConfigurationManager.
			get_ConnectionStrings().get_Item("NorthwindConnection").
			get_ConnectionString());
        SqlCommand sc = new SqlCommand(" SELECT FirstName,LastName,Title,"
            + "TitleOfCourtesy,ReportsTo " + " FROM Employees "
            + " WHERE EmployeeID = @empId", conn);
        // Add the employee ID parameter and set its value.
        sc.get_Parameters().Add(new SqlParameter("@empId", SqlDbType.Int)).
            set_Value(anID.ToString());
        SqlDataReader sdr = null;

        try {
            conn.Open();
            sdr = sc.ExecuteReader();
            // Only loop once.
            if (sdr != null && sdr.Read()) {
                // The IEnumerable contains DataRowView objects.
                this.firstName = sdr.get_Item("FirstName").ToString();
                this.lastName = sdr.get_Item("LastName").ToString();
                this.title = sdr.get_Item("Title").ToString();
                this.titleOfCourtesy = sdr.get_Item("TitleOfCourtesy").ToString();
                if (!(sdr.IsDBNull(4))) {
                    this.reportsTo = sdr.GetInt32(4);
                }
            }
            else {
                throw new NorthwindDataException("Data not loaded for"
                    + " employee id.");
            }
        }
        finally {
            try {
                if (sdr != null) {
                    sdr.Close();
                }
                conn.Close();
            }
            catch (SqlException exp) {
                // Log an event in the Application Event Log.
            }
        }
    } //NorthwindEmployee

    private Object id;

    /** @property 
     */
    public String get_EmpID()
    {
        return id.ToString();
    } //get_EmpID

    private String lastName;

    /** @property 
     */
    public String get_LastName()
    {
        return lastName;
    } //get_LastName

    /** @property 
     */
    public void set_LastName(String value)
    {
        lastName = value;
    } //set_LastName

    private String firstName;

    /** @property 
     */
    public String get_FirstName()
    {
        return firstName;
    } //get_FirstName

    /** @property 
     */
    public void set_FirstName(String value)
    {
        firstName = value;
    } //set_FirstName

    /** @property 
     */
    public String get_FullName()
    {
        return get_FirstName() + " " + get_LastName();
    } //get_FullName

    private String title;

    /** @property 
     */
    public String get_Title()
    {
        return title;
    } //get_Title

    /** @property 
     */
    public void set_Title(String value)
    {
        title = value;
    } //set_Title

    private String titleOfCourtesy;

    /** @property 
     */
    public String get_Courtesy()
    {
        return titleOfCourtesy;
    } //get_Courtesy

    /** @property 
     */
    public void set_Courtesy(String value)
    {
        titleOfCourtesy = value;
    } //set_Courtesy

    private int reportsTo;

    /** @property 
     */
    public int get_Supervisor()
    {
        return reportsTo;
    } //get_Supervisor

    /** @property 
     */
    public void set_Supervisor(int value)
    {
        reportsTo = value;
    } //set_Supervisor

    public boolean Save()
    {
        // Implement persistence logic.
        return true;
    } //Save

    public boolean Delete()
    {
        // Implement delete logic.
        return true;
    } //Delete
} //NorthwindEmployee

class NorthwindDataException extends Exception
{
    public NorthwindDataException(String msg)
    {
        super(msg);
    } //NorthwindDataException
} //NorthwindDataException

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2016 Microsoft