Freigeben über


SqlCacheDependency Konstruktoren

Definition

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse.

Überlädt

SqlCacheDependency(SqlCommand)

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse mit dem angegebenen SqlCommand, um eine Abhängigkeit zwischen Cache und Schlüssel zu erstellen.

SqlCacheDependency(String, String)

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse mit den angegebenen Parametern zum Erstellen einer Abhängigkeit zwischen Cache und Schlüssel.

SqlCacheDependency(SqlCommand)

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse mit dem angegebenen SqlCommand, um eine Abhängigkeit zwischen Cache und Schlüssel zu erstellen.

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)

Parameter

sqlCmd
SqlCommand

Ein SqlCommand, der zum Erstellen eines SqlCacheDependency-Objekts verwendet wird.

Ausnahmen

Der sqlCmd-Parameter ist null.

Für die SqlCommand instance ist die NotificationAutoEnlist -Eigenschaft auf true festgelegt, und auf der Seite befindet sich eine @ OutputCache Direktive, deren SqlDependency Attribut auf CommandNotificationfestgelegt ist.

Hinweise

Dieser Konstruktor wird verwendet, um Objekte zu erstellenSqlCacheDependency, die die Abfragebenachrichtigungsfunktion von SQL Server 2005-Produkten verwenden.

SQL-Anweisungen, die dem sqlCmd Parameter zugeordnet sind, müssen Folgendes enthalten:

  • Vollqualifizierte Tabellennamen, einschließlich des Namens des Tabellenbesitzers. Wenn Sie beispielsweise auf eine Tabelle namens Customers verweisen möchten, die dem Datenbankbesitzer gehört, muss die SQL-Anweisung auf dbo.customersverweisen.

  • Explizite Spaltennamen in der Select-Anweisung. Sie können nicht das Platzhalterzeichen (*) verwenden, um alle Spalten aus einer Tabelle auszuwählen. Anstelle von select * from dbo.customersmüssen Sie beispielsweise verwenden select name, address, city, state from dbo.customers.

Dieser Konstruktor kann nicht verwendet werden, um einen SqlCommand instance einem SqlCacheDependency instance auf einer Seite zuzuordnen, indem SQL Server 2005-Abfragebenachrichtigungen mit Ausgabezwischenspeicherung auf Seitenebene verwendet werden.

Weitere Informationen

Gilt für:

SqlCacheDependency(String, String)

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse mit den angegebenen Parametern zum Erstellen einer Abhängigkeit zwischen Cache und Schlüssel.

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)

Parameter

databaseEntryName
String

Der Name einer im databases-Element der Web.config-Datei der Anwendung definierten Datenbank.

tableName
String

Der Name der Datenbanktabelle, der die SqlCacheDependency zugeordnet wird.

Ausnahmen

Die interne Überprüfung auf SqlClientPermission schlug fehl.

- oder -

Der databaseEntryName wurde nicht in der Liste der Datenbanken gefunden, die für tabellenbasierte Benachrichtigungen konfiguriert wurden.

- oder -

Das SqlCacheDependency-Objekt konnte während der Initialisierung keine Verbindung mit der Datenbank herstellen.

- oder -

Das SqlCacheDependency-Objekt hat einen Berechtigungsverweigerungsfehler festgestellt, der in der Datenbank oder in den in der Datenbank gespeicherten Prozeduren, die das SqlCacheDependency-Objekt unterstützen, aufgetreten ist.

Der tableName-Parameter ist Empty.

Für die SqlCacheDependency ist kein Abruf aktiviert.

- oder -

Das Abrufintervall ist nicht ordnungsgemäß konfiguriert.

- oder -

In der Konfigurationsdatei der Anwendung wurde keine Verbindungszeichenfolge angegeben.

- oder -

Die in der Konfigurationsdatei der Anwendung angegebene Verbindungszeichenfolge konnte nicht gefunden werden.

- oder -

Die in der Konfigurationsdatei der Anwendung angegebene Verbindungszeichenfolge ist eine leere Zeichenfolge.

Die im databaseEntryName-Parameter angegebene Datenbank ist nicht für Änderungsbenachrichtigungen aktiviert.

Die im tableName-Parameter angegebene Datenbanktabelle ist nicht für Änderungsbenachrichtigungen aktiviert.

databaseEntryName ist null.

- oder -

tableName ist null.

Beispiele

Im folgenden Codebeispiel wird dieser Konstruktor verwendet, um eine instance der -Klasse zu erstellen, die SqlCacheDependency einer Datenbanktabelle namens Categories in einer SQL Server Datenbank namens Northwind zugeordnet ist.

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

Hinweise

Dieser Konstruktor wird verwendet, um Objekte für SQL Server 7.0- und SQL Server 2000-Produkte zu erstellenSqlCacheDependency.

Der an den database Parameter übergebene Datenbankname muss in der Web.config-Datei der Anwendung definiert werden. Die folgende Web.config-Datei definiert beispielsweise eine Datenbank namens pubs für SqlCacheDependency Änderungsbenachrichtigungen.

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

Zwei Ausnahmen werden häufig ausgelöst, wenn dieser Konstruktor verwendet wird: DatabaseNotEnabledForNotificationException und TableNotEnabledForNotificationException. Wenn ein DatabaseNotEnabledForNotificationException ausgelöst wird, können Sie die SqlCacheDependencyAdmin.EnableNotifications -Methode im Code zur Ausnahmebehandlung aufrufen oder das aspnet_regsql.exe Befehlszeilentool verwenden, um die Datenbank für Benachrichtigungen einzurichten. Wenn ein TableNotEnabledForNotificationException ausgelöst wird, können Sie die SqlCacheDependencyAdmin.EnableTableForNotifications -Methode aufrufen oder aspnet_regsql.exe verwenden, um die Tabelle für Benachrichtigungen einzurichten.

Weitere Informationen

Gilt für: