Partilhar via


SqlCacheDependency Construtores

Definição

Inicializa uma nova instância da classe SqlCacheDependency.

Sobrecargas

SqlCacheDependency(SqlCommand)

Inicializa uma nova instância da classe SqlCacheDependency usando o SqlCommand fornecido para criar uma dependência chave de cache.

SqlCacheDependency(String, String)

Inicializa uma nova instância da classe SqlCacheDependency usando os parâmetros fornecidos para criar uma dependência chave de cache.

SqlCacheDependency(SqlCommand)

Inicializa uma nova instância da classe SqlCacheDependency usando o SqlCommand fornecido para criar uma dependência chave de cache.

public:
 SqlCacheDependency(System::Data::SqlClient::SqlCommand ^ sqlCmd);
public SqlCacheDependency (System.Data.SqlClient.SqlCommand sqlCmd);
new System.Web.Caching.SqlCacheDependency : System.Data.SqlClient.SqlCommand -> System.Web.Caching.SqlCacheDependency
Public Sub New (sqlCmd As SqlCommand)

Parâmetros

sqlCmd
SqlCommand

Um SqlCommand usado para criar um objeto SqlCacheDependency.

Exceções

O parâmetro sqlCmd é null.

A SqlCommand instância tem sua NotificationAutoEnlist propriedade definida como true e há uma @ OutputCache diretiva na página com o SqlDependency atributo definido CommandNotificationcomo .

Comentários

Esse construtor é usado para criar SqlCacheDependency objetos que usam o recurso de notificação de consulta de produtos SQL Server 2005.

As instruções SQL associadas ao sqlCmd parâmetro devem incluir o seguinte:

  • Nomes de tabela totalmente qualificados, incluindo o nome do proprietário da tabela. Por exemplo, para se referir a uma tabela chamada Customers que pertence ao proprietário do banco de dados, a instrução SQL deve se referir a dbo.customers.

  • Nomes de coluna explícitos na instrução Select. Você não pode usar o caractere curinga asterisco (*) para selecionar todas as colunas de uma tabela. Por exemplo, em vez de select * from dbo.customers, você deve usar select name, address, city, state from dbo.customers.

Esse construtor não pode ser usado para associar uma SqlCommand instância a uma SqlCacheDependency instância em uma página usando SQL Server notificações de consulta 2005 com cache de saída no nível da página.

Confira também

Aplica-se a

SqlCacheDependency(String, String)

Inicializa uma nova instância da classe SqlCacheDependency usando os parâmetros fornecidos para criar uma dependência chave de cache.

public:
 SqlCacheDependency(System::String ^ databaseEntryName, System::String ^ tableName);
public SqlCacheDependency (string databaseEntryName, string tableName);
new System.Web.Caching.SqlCacheDependency : string * string -> System.Web.Caching.SqlCacheDependency
Public Sub New (databaseEntryName As String, tableName As String)

Parâmetros

databaseEntryName
String

O nome de um banco de dados definido no elemento de bancos de dados do arquivo de Web.config do aplicativo.

tableName
String

O nome da tabela de banco de dados associada ao SqlCacheDependency.

Exceções

A verificação interna de SqlClientPermission falhou.

- ou -

O databaseEntryName não foi encontrado na lista de bancos de dados configurada para notificações baseadas em tabela.

- ou -

O objeto SqlCacheDependency não conseguir se conectar ao banco de dados durante a inicialização.

- ou -

O objeto SqlCacheDependency encontrou um erro de permissão negada no banco de dados ou nos procedimentos armazenados do banco de dados que oferecem suporte ao objeto SqlCacheDependency.

O parâmetro tableName é Empty.

A sondagem não está habilitada para o SqlCacheDependency.

- ou -

O intervalo de sondagem não está configurado corretamente.

- ou -

Nenhuma cadeia de conexão foi especificada no arquivo de configuração de aplicativo.

- ou -

Não foi possível encontrar a cadeia de conexão especificada no arquivo de configuração de aplicativo.

- ou -

A cadeia de conexão especificada no arquivo de configuração de aplicativo é uma cadeia de caracteres vazia.

O banco de dados especificado no parâmetro databaseEntryName não está habilitado para notificações de alteração.

A tabela de banco de dados especificada no parâmetro tableName não está habilitada para notificações de alteração.

databaseEntryName é null.

- ou -

tableName é null.

Exemplos

O exemplo de código a seguir usa esse construtor para criar uma instância da classe associada a SqlCacheDependency uma tabela de banco de dados chamada Categories em um banco de dados SQL Server chamado Northwind.

public void Page_Load(object Src, EventArgs E) 
{ 
    // Declare the SqlCacheDependency instance, SqlDep. 
    SqlCacheDependency SqlDep = null; 
    
    // Check the Cache for the SqlSource key. 
    // If it isn't there, create it with a dependency 
    // on a SQL Server table using the SqlCacheDependency class. 
    if (Cache["SqlSource"] == null) { 
        
        // Because of possible exceptions thrown when this 
        // code runs, use Try...Catch...Finally syntax. 
        try { 
            // Instantiate SqlDep using the SqlCacheDependency constructor. 
            SqlDep = new SqlCacheDependency("Northwind", "Categories"); 
        } 
        
        // Handle the DatabaseNotEnabledForNotificationException with 
        // a call to the SqlCacheDependencyAdmin.EnableNotifications method. 
        catch (DatabaseNotEnabledForNotificationException exDBDis) { 
            try { 
                SqlCacheDependencyAdmin.EnableNotifications("Northwind"); 
            } 
            
            // If the database does not have permissions set for creating tables, 
            // the UnauthorizedAccessException is thrown. Handle it by redirecting 
            // to an error page. 
            catch (UnauthorizedAccessException exPerm) { 
                Response.Redirect(".\\ErrorPage.htm"); 
            } 
        } 
        
        // Handle the TableNotEnabledForNotificationException with 
        // a call to the SqlCacheDependencyAdmin.EnableTableForNotifications method. 
        catch (TableNotEnabledForNotificationException exTabDis) { 
            try { 
                SqlCacheDependencyAdmin.EnableTableForNotifications("Northwind", "Categories"); 
            } 
            
            // If a SqlException is thrown, redirect to an error page. 
            catch (SqlException exc) { 
                Response.Redirect(".\\ErrorPage.htm"); 
            } 
        } 
        
        // If all the other code is successful, add MySource to the Cache 
        // with a dependency on SqlDep. If the Categories table changes, 
        // MySource will be removed from the Cache. Then generate a message 
        // that the data is newly created and added to the cache. 
        finally { 
            Cache.Insert("SqlSource", Source1, SqlDep); 
            CacheMsg.Text = "The data object was created explicitly."; 
            
        } 
    } 
    
    else { 
        CacheMsg.Text = "The data was retrieved from the Cache."; 
    } 
} 
Sub Page_Load(Src As Object, E As EventArgs)
   ' Declare the SqlCacheDependency instance, SqlDep.
   Dim SqlDep As SqlCacheDependency

   ' Check the Cache for the SqlSource key.
   ' If it isn't there, create it with a dependency
   ' on a SQL Server table using the SqlCacheDependency class.
   If Cache("SqlSource") Is Nothing

      ' Because of possible exceptions thrown when this
      ' code runs, use Try...Catch...Finally syntax.
      Try
         ' Instantiate SqlDep using the SqlCacheDependency constructor.
         SqlDep = New SqlCacheDependency("Northwind", "Categories")

      ' Handle the DatabaseNotEnabledForNotificationException with
      ' a call to the SqlCacheDependencyAdmin.EnableNotifications method.
      Catch exDBDis As DatabaseNotEnabledForNotificationException
         Try
            SqlCacheDependencyAdmin.EnableNotifications("Northwind")

         ' If the database does not have permissions set for creating tables,
         ' the UnauthorizedAccessException is thrown. Handle it by redirecting
         ' to an error page.
         Catch exPerm As UnauthorizedAccessException
             Response.Redirect(".\ErrorPage.htm")
         End Try

      ' Handle the TableNotEnabledForNotificationException with
            ' a call to the SqlCacheDependencyAdmin.EnableTableForNotifications method.
      Catch exTabDis As TableNotEnabledForNotificationException
         Try
            SqlCacheDependencyAdmin.EnableTableForNotifications( _
             "Northwind", "Categories")

         ' If a SqlException is thrown, redirect to an error page.
         Catch exc As SqlException
             Response.Redirect(".\ErrorPage.htm")
         End Try

      ' If all the other code is successful, add MySource to the Cache
      ' with a dependency on SqlDep. If the Categories table changes,
      ' MySource will be removed from the Cache. Then generate a message
            ' that the data is newly created and added to the cache.
      Finally
         Cache.Insert("SqlSource", Source1, SqlDep)
            CacheMsg.Text = "The data object was created explicitly."

      End Try

    Else
       CacheMsg.Text = "The data was retrieved from the Cache."
    End If
End Sub

Comentários

Esse construtor é usado para criar SqlCacheDependency objetos para SQL Server produtos 7.0 e SQL Server 2000.

O nome do banco de dados passado para o database parâmetro deve ser definido no arquivo Web.config do aplicativo. Por exemplo, o arquivo Web.config a seguir define um banco de dados chamado pubs para SqlCacheDependency notificações de alteração.

<configuration>
  <connectionStrings>
    <add name="Pubs" connectionString="Data Source=(local); Initial Catalog=pubs; Integrated Security=true"; providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <caching>
      <sqlCacheDependency enabled = "true" pollTime = "60000" >
        <databases>
          <add name="pubs"
            connectionStringName="pubs"
            pollTime="9000000"
            />
        </databases>
      </sqlCacheDependency>
    </caching>
  </system.web>
</configuration>

Duas exceções geralmente são geradas quando esse construtor é usado: DatabaseNotEnabledForNotificationException e TableNotEnabledForNotificationException. Se um DatabaseNotEnabledForNotificationException for gerado, você poderá chamar o SqlCacheDependencyAdmin.EnableNotifications método no código de tratamento de exceções ou usar a aspnet_regsql.exe ferramenta de linha de comando para configurar o banco de dados para notificações. Se um TableNotEnabledForNotificationException for gerado, você poderá chamar o SqlCacheDependencyAdmin.EnableTableForNotifications método ou usar aspnet_regsql.exe para configurar a tabela para notificações.

Confira também

Aplica-se a