SqlCacheDependency Construtores

Definição

Inicializa uma nova instância da SqlCacheDependency classe.

Sobrecargas

Name Description
SqlCacheDependency(SqlCommand)

Inicializa uma nova instância da SqlCacheDependency classe, usando a fornecida SqlCommand para criar uma dependência de chave de cache.

SqlCacheDependency(String, String)

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

SqlCacheDependency(SqlCommand)

Inicializa uma nova instância da SqlCacheDependency classe, usando a fornecida SqlCommand para criar uma dependência de 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

A SqlCommand que é usado para criar um SqlCacheDependency objeto.

Exceções

O sqlCmd parâmetro é null.

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

Observações

Este construtor é usado para criar objetos SqlCacheDependency que utilizam a funcionalidade de notificação de consulta dos produtos SQL Server 2005.

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

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

  • Nomes explícitos das colunas na instrução Select. Não pode usar o carácter coringa asterisco (*) para selecionar todas as colunas de uma tabela. Por exemplo, em vez de select * from dbo.customers, deve usar select name, address, city, state from dbo.customers.

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

Ver também

Aplica-se a

SqlCacheDependency(String, String)

Inicializa uma nova instância da SqlCacheDependency classe, usando os parâmetros fornecidos para criar uma dependência da 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 uma base de dados definida no elemento de bases de dados do ficheiro Web.config da aplicação.

tableName
String

O nome da tabela da base de dados à qual o SqlCacheDependency está associado.

Exceções

A verificação interna para SqlClientPermission falhou.

-ou-

Não databaseEntryName foi encontrado na lista de bases de dados configuradas para notificações baseadas em tabelas.

-ou-

O SqlCacheDependency objeto não conseguia ligar-se à base de dados durante a inicialização.

-ou-

O SqlCacheDependency objeto encontrou um erro de permissão negada, quer na base de dados, quer nos procedimentos armazenados que suportam o SqlCacheDependency objeto.

O tableName parâmetro é Empty.

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

-ou-

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

-ou-

Não era especificada nenhuma cadeia de ligação no ficheiro de configuração da aplicação.

-ou-

A cadeia de ligação especificada no ficheiro de configuração da aplicação não foi encontrada.

-ou-

A cadeia de ligação especificada no ficheiro de configuração da aplicação é uma string vazia.

A base de dados especificada no databaseEntryName parâmetro não está ativada para notificações de alteração.

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

databaseEntryName é null.

-ou-

tableName é null.

Exemplos

O exemplo de código seguinte utiliza este construtor para criar uma instância da classe SqlCacheDependency associada a uma tabela de base de dados chamada Categorias numa base de dados SQL Server chamada 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

Observações

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

O nome da base de dados passado para o database parâmetro deve ser definido no ficheiro Web.config da aplicação. Por exemplo, o ficheiro de Web.config seguinte define uma base de dados chamada pubs para SqlCacheDependency notificações de alterações.

<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 são frequentemente lançadas quando este construtor é usado: DatabaseNotEnabledForNotificationException e TableNotEnabledForNotificationException. Se um a DatabaseNotEnabledForNotificationException for lançado, pode chamar o SqlCacheDependencyAdmin.EnableNotifications método em código de gestão de exceções, ou usar a aspnet_regsql.exe ferramenta de linha de comandos para configurar a base de dados para notificações. Se for lançado a TableNotEnabledForNotificationException , podes chamar o SqlCacheDependencyAdmin.EnableTableForNotifications método ou usar aspnet_regsql.exe para configurar a tabela de notificações.

Ver também

Aplica-se a