Partilhar via


SqlCacheDependencyAdmin Classe

Definição

Executa tarefas administrativas necessárias em um banco de dados do SQL Server para dar suporte à classe SqlCacheDependency ao usar dependências baseadas em sondagem. Essa classe não pode ser herdada.

public ref class SqlCacheDependencyAdmin abstract sealed
public static class SqlCacheDependencyAdmin
type SqlCacheDependencyAdmin = class
Public Class SqlCacheDependencyAdmin
Herança
SqlCacheDependencyAdmin

Exemplos

O exemplo de código a seguir é uma página de ASP.NET simples para habilitar e desabilitar notificações de alteração em tabelas de banco de dados do SQL Server. Ele usa o SqlCacheDependencyAdmin objeto para gerenciar notificações de alteração no banco de dados especificado em uma cadeia de conexão chamada MyConnectionString. O exemplo inclui dois arquivos, um arquivo .aspx que define a interface do usuário e um arquivo code-behind que contém o código-fonte para os eventos de ASP.NET.

O primeiro exemplo é o arquivo .aspx que define a interface do usuário.

Importante

Este exemplo tem uma caixa de texto que aceita a entrada do usuário, que é uma possível ameaça à segurança. Por padrão, ASP.NET páginas da Web validam que a entrada do usuário não inclui elementos html ou script. Para obter mais informações, consulte Visão geral de explorações de script.


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="cacheDependencyAdmincs.aspx.cs"
  Inherits="cacheDependencyAdmincs" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>Cache Dependency Administration</title>
</head>
<body>
  <form id="form1" runat="server">
    <table>
      <tr>
        <td colspan="2">
          Database support for change notifications:
        </td>
      </tr>
      <tr>
        <td align="center">
          <asp:Button ID="enableNotification" runat="server" Text="On" OnClick="enableNotification_Click" />
        </td>
        <td align="center">
          <asp:Button ID="disableNotification" runat="server" Text="Off" OnClick="disableNotification_Click" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:Label ID="enabledTablesMsg" runat="server" Text="Tables enabled for change notification:" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:ListBox ID="enabledTables" runat="server" SelectionMode="multiple" /><br />
          <asp:Button ID="disableTable" runat="server" Text="Disable selected table(s)" OnClick="disableTable_Click" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:Label ID="tableEnableMsg" runat="server" Text="Enable change notification on table:" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:TextBox ID="tableName" runat="server" /><br />
          <asp:Button ID="enableTable" runat="server" Text="Enable table(s)" OnClick="enableTable_Click" />
          <asp:Label id="enableTableErrorMsg" runat="server" Visible="false" />
        </td>
      </tr>
    </table>
  </form>
</body>
</html>
<%@ Page Language="VB" CodeFile="cacheDependencyAdminvb.aspx.vb"
  Inherits="cacheDependencyAdminvb"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <meta http-equiv="Content-Type" content="text/html" />
  <title>Cache Dependency Administration</title>
</head>
<body>
  <form id="form1" runat="server">
    <table>
      <tr>
        <td colspan="2">
          Database support for change notifications:
        </td>
      </tr>
      <tr>
        <td align="center">
          <asp:Button ID="enableNotification" runat="server" Text="On" OnClick="enableNotification_Click" />
        </td>
        <td align="center">
          <asp:Button ID="disableNotification" runat="server" Text="Off" OnClick="disableNotification_Click" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:Label ID="enabledTablesMsg" runat="server" Text="Tables enabled for change notification:" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:ListBox ID="enabledTables" runat="server" SelectionMode="multiple" /><br />
          <asp:Button ID="disableTable" runat="server" Text="Disable selected table(s)" OnClick="disableTable_Click" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:Label ID="tableEnableMsg" runat="server" Text="Enable change notification on table:" />
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <asp:TextBox ID="tableName" runat="server" /><br />
          <asp:Button ID="enableTable" runat="server" Text="Enable table(s)" OnClick="enableTable_Click" />
          <asp:Label id="enableTableErrorMsg" runat="server" Visible="false" />
        </td>
      </tr>
    </table>
  </form>
</body>
</html>

O segundo exemplo é o arquivo code-behind que contém o código-fonte para os eventos de página.

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.Web.Caching;

public partial class cacheDependencyAdmincs : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    // Put page in default state.
    enabledTables.Visible = true;
    disableTable.Visible = true;
    enabledTablesMsg.Text = "Tables enabled for change notification:";

    tableName.Visible = true;
    enableTable.Visible = true;
    tableEnableMsg.Text = "Enable change notification on table(s):";
    enableTableErrorMsg.Visible = false;
  }

   protected void Page_PreRender(object sender, EventArgs e)
  {
    try
    {
      string[] enabledTablesList =
      SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(
        ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
      if (enabledTablesList.Length > 0)
      {
        enabledTables.DataSource = enabledTablesList;
        enabledTables.DataBind();
      }
      else
      {
        enabledTablesMsg.Text = "No tables are enabled for change notifications.";
        enabledTables.Visible = false;
        disableTable.Visible = false;
      }
    }
    catch (DatabaseNotEnabledForNotificationException ex)
    {
      enabledTables.Visible = false;
      disableTable.Visible = false;
      enabledTablesMsg.Text = "Cache notifications are not enabled in this database.";

      tableName.Visible = false;
      enableTable.Visible = false;
      tableEnableMsg.Text = "Must enable database for notifications before enabling tables";
    }
  }
  protected void enableNotification_Click(object sender, EventArgs e)
  {
    SqlCacheDependencyAdmin.EnableNotifications(
      ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
  }
  protected void disableNotification_Click(object sender, EventArgs e)
  {
    SqlCacheDependencyAdmin.DisableNotifications(
      ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
  }
  protected void disableTable_Click(object sender, EventArgs e)
  {
    foreach (ListItem item in enabledTables.Items)
    {
      if (item.Selected)
      {
        SqlCacheDependencyAdmin.DisableTableForNotifications(
          ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString,
          item.Text);
      }
    }
  }
  protected void enableTable_Click(object sender, EventArgs e)
  {
    try
    {
      if (tableName.Text.Contains(";"))
      {
        string[] tables = tableName.Text.Split(new Char[] { ';' });
        for (int i = 0; i < tables.Length; i++)
          tables[i] = tables[i].Trim();

        SqlCacheDependencyAdmin.EnableTableForNotifications(
          ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString,
          tables);
      }
      else
      {
        SqlCacheDependencyAdmin.EnableTableForNotifications(
          ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString,
          tableName.Text);
      }
    }
    catch (HttpException ex)
    {
      enableTableErrorMsg.Text = "<br />" +
        "An error occurred enabling a table.<br />" +
        "The error message was: " +
        ex.Message;
      enableTableErrorMsg.Visible = true;
    }
  }
}
Partial Class cacheDependencyAdminvb
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    'Put the page into a default state.
    enabledTables.Visible = True
    disableTable.Visible = True
    enabledTablesMsg.Text = "Tables enabled for change notification:"

    tableName.Visible = True
    enableTable.Visible = True
    tableEnableMsg.Text = "Enable change notification on table(s):"
    enableTableErrorMsg.Text = ""
  End Sub

  Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs)
    Try
      Dim enabledTablesList As String()
      enabledTablesList = SqlCacheDependencyAdmin.GetTablesEnabledForNotifications( _
        ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString)
      If enabledTablesList.Length > 0 Then
        enabledTables.DataSource = enabledTablesList
        enabledTables.DataBind()
      Else
        enabledTablesMsg.Text = "No tables are enabled for change notifications."
        enabledTables.Visible = False
        disableTable.Visible = False
      End If
    Catch ex As DatabaseNotEnabledForNotificationException
      enabledTables.Visible = False
      disableTable.Visible = False
      enabledTablesMsg.Text = "Cache notifications are not enabled in this database."

      tableName.Visible = False
      enableTable.Visible = False
      tableEnableMsg.Text = "Must enable database for notifications before enabling tables."
    End Try
  End Sub
  Protected Sub enableNotification_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    SqlCacheDependencyAdmin.EnableNotifications( _
        ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString)
  End Sub
  Protected Sub disableNotification_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    SqlCacheDependencyAdmin.DisableNotifications( _
        ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString)
  End Sub
  Protected Sub disableTable_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    For Each item As ListItem In enabledTables.Items
      If item.Selected Then
        SqlCacheDependencyAdmin.DisableTableForNotifications( _
        ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, _
        item.Text)
      End If
    Next
  End Sub
  Protected Sub enableTable_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Try
      If tableName.Text.Contains(";") Then
        Dim tables As String()
        tables = tableName.Text.Split(New [Char]() {";"c})
        For i As Integer = 0 To tables.Length - 1
          tables(i) = tables(i).Trim
        Next

        SqlCacheDependencyAdmin.EnableTableForNotifications( _
          ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, _
          tables)
      Else
        SqlCacheDependencyAdmin.EnableTableForNotifications( _
          ConfigurationManager.ConnectionStrings("MyConnectionString").ConnectionString, _
          tableName.Text)
      End If
    Catch ex As HttpException
      enableTableErrorMsg.Text = "<br />" & _
        "An error occurred enabling a table.<br />" & _
        "The error message was: " & _
        ex.Message
      enableTableErrorMsg.Visible = True
    End Try
  End Sub

End Class

Comentários

Você pode usar os métodos dessa classe para habilitar e desabilitar programaticamente um banco de dados do SQL Server e suas tabelas para SqlCacheDependency notificações de alteração de objeto. Além disso, essa classe obtém informações sobre quais tabelas em um banco de dados estão habilitadas para notificações de alteração usando o GetTablesEnabledForNotifications método . No entanto, você também pode usar a ferramenta de linha de comando Aspnet_regsql para gerenciar notificações de alteração para um banco de dados do SQL Server e suas tabelas.

Observação

Para chamar qualquer um dos métodos nessa classe, a conta usada para acessar o banco de dados do SQL Server deve ter permissões para criar tabelas e procedimentos armazenados. Para habilitar notificações em uma tabela específica, você deve ter permissões para criar um gatilho do SQL Server nessa tabela. Para obter mais informações sobre como definir permissões em um banco de dados, consulte a documentação do SQL Server. Para obter mais informações sobre a conta usada pelo processo de ASP.NET, confira Representação ASP.NET.

Métodos

DisableNotifications(String)

Desabilita as notificações de alteração SqlCacheDependency do banco de dados especificado.

DisableTableForNotifications(String, String)

Desabilita as notificações de alteração SqlCacheDependency em uma tabela do banco de dados do SQL Server.

DisableTableForNotifications(String, String[])

Desabilita as notificações de alteração SqlCacheDependency em uma matriz das tabelas do banco de dados do SQL Server.

EnableNotifications(String)

Habilita notificações de alteração SqlCacheDependency no banco de dados especificado.

EnableTableForNotifications(String, String)

Conecta-se ao banco de dados do SQL Server especificado e habilita a tabela do banco de dados especificada para notificações de alteração SqlCacheDependency.

EnableTableForNotifications(String, String[])

Conecta-se ao banco de dados do SQL Server especificado e habilita a matriz especificada das tabelas do banco de dados para a notificação de alteração SqlCacheDependency.

GetTablesEnabledForNotifications(String)

Recupera uma matriz de cadeia de caracteres que contém o nome de todas as tabelas habilitadas para notificações de alteração em um banco de dados do SQL Server.

Aplica-se a

Confira também