Ler em inglês

Compartilhar 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 static 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>

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;
    }
  }
}

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

Produto Versões
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Confira também