Поделиться через


SqlCacheDependency Конструкторы

Определение

Инициализирует новый экземпляр класса SqlCacheDependency.

Перегрузки

SqlCacheDependency(SqlCommand)

Инициализирует новый экземпляр класса SqlCacheDependency с помощью указанной SqlCommand для создания зависимости кэш–ключевое поле.

SqlCacheDependency(String, String)

Инициализирует новый экземпляр класса SqlCacheDependency с использованием для создания зависимости кэш–ключевое поле указанных параметров.

SqlCacheDependency(SqlCommand)

Инициализирует новый экземпляр класса SqlCacheDependency с помощью указанной SqlCommand для создания зависимости кэш–ключевое поле.

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)

Параметры

sqlCmd
SqlCommand

SqlCommand, используемый для создания объекта SqlCacheDependency.

Исключения

Параметр sqlCmd имеет значение null.

Для SqlCommand свойства экземпляра задано NotificationAutoEnlist значение true , а на странице есть @ OutputCache директива с атрибутом SqlDependency , равным CommandNotification.

Комментарии

Этот конструктор используется для создания SqlCacheDependency объектов, использующих функцию уведомления о запросах продуктов SQL Server 2005.

Инструкции SQL, связанные с параметром sqlCmd , должны включать следующее:

  • Полные имена таблиц, включая имя владельца таблицы. Например, чтобы сослаться на таблицу с именем Customers, принадлежащей владельцу базы данных, инструкция SQL должна ссылаться на dbo.customers.

  • Явные имена столбцов в инструкции Select. Нельзя использовать подстановочный знак звездочки (*) для выбора всех столбцов из таблицы. Например, вместо select * from dbo.customersнеобходимо использовать select name, address, city, state from dbo.customers.

Этот конструктор нельзя использовать для связывания экземпляра SqlCommand с экземпляром SqlCacheDependency на странице с помощью уведомлений SQL Server запросов 2005 с кэшированием выходных данных на уровне страницы.

См. также раздел

Применяется к

SqlCacheDependency(String, String)

Инициализирует новый экземпляр класса SqlCacheDependency с использованием для создания зависимости кэш–ключевое поле указанных параметров.

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)

Параметры

databaseEntryName
String

Имя базы данных, определенное в элементе баз данных файла Web.config приложения.

tableName
String

Имя таблицы базы данных, с которой связан SqlCacheDependency.

Исключения

Не удалось выполнить внутреннюю проверку SqlClientPermission.

-или-

databaseEntryName не найден в списке баз данных, настроенных для уведомлений на основе таблиц.

-или-

Объекту SqlCacheDependency не удалось подключиться к базе данных во время инициализации.

-или-

Объектом SqlCacheDependency обнаружена ошибка отказа в доступе либо в базе данных, либо в хранимых процедурах базы данных, поддерживающих объект SqlCacheDependency.

Параметр tableName имеет значение Empty.

Опрос не разрешен для SqlCacheDependency.

-или-

Интервал опроса настроен неправильно.

-или-

В файле конфигурации приложения не указана строка подключения.

-или-

Не удалось найти строку подключения, указанную в файле конфигурации приложения.

-или-

Строка подключения, указанная в файле конфигурации приложения, является пустой строкой.

База данных, указанная в параметре databaseEntryName, не включена для уведомлений об изменениях.

Таблица базы данных, указанная в параметре tableName, не включена для уведомлений об изменениях.

databaseEntryName имеет значение null.

-или-

tableName имеет значение null.

Примеры

В следующем примере кода этот конструктор используется для создания экземпляра класса , связанного SqlCacheDependency с таблицей базы данных с именем Categories в базе данных SQL Server с именем 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

Комментарии

Этот конструктор используется для создания SqlCacheDependency объектов для продуктов SQL Server 7.0 и SQL Server 2000.

Имя базы данных, передаваемое параметру database , должно быть определено в файле Web.config приложения. Например, следующий файл Web.config определяет базу данных с именем pubs для SqlCacheDependency уведомлений об изменениях.

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

При использовании этого конструктора обычно возникают два исключения: DatabaseNotEnabledForNotificationException и TableNotEnabledForNotificationException. DatabaseNotEnabledForNotificationException Если возникает исключение , можно вызвать метод в коде SqlCacheDependencyAdmin.EnableNotifications обработки исключений или использовать aspnet_regsql.exe программу командной строки для настройки базы данных для уведомлений. TableNotEnabledForNotificationException Если возникает исключение , можно вызвать SqlCacheDependencyAdmin.EnableTableForNotifications метод или использовать aspnet_regsql.exe , чтобы настроить таблицу для уведомлений.

См. также раздел

Применяется к