SqlCacheDependency Konstruktoren

Definition

Initialisiert eine neue Instanz der SqlCacheDependency-Klasse.

Überlädt

Name Beschreibung
SqlCacheDependency(SqlCommand)

Initialisiert eine neue Instanz der SqlCacheDependency Klasse, die zum Erstellen einer Cacheschlüsselabhängigkeit bereitgestellt wird SqlCommand .

SqlCacheDependency(String, String)

Initialisiert eine neue Instanz der SqlCacheDependency Klasse, wobei die bereitgestellten Parameter zum Erstellen einer Cacheschlüsselabhängigkeit verwendet werden.

SqlCacheDependency(SqlCommand)

Initialisiert eine neue Instanz der SqlCacheDependency Klasse, die zum Erstellen einer Cacheschlüsselabhängigkeit bereitgestellt wird 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)

Parameter

sqlCmd
SqlCommand

Ein SqlCommand Objekt, das zum Erstellen eines SqlCacheDependency Objekts verwendet wird.

Ausnahmen

Der sqlCmd Parameter ist null.

Die SqlCommand Instanz hat ihre NotificationAutoEnlist Eigenschaft festgelegt true , und es gibt eine @ OutputCache Direktive auf der Seite, auf der das SqlDependency Attribut festgelegt ist CommandNotification.

Hinweise

Dieser Konstruktor wird verwendet, um SqlCacheDependency-Objekte zu erstellen, die das Abfragebenachrichtigungsfeature 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. Um z. B. auf eine Tabelle mit dem Namen "Customers" zu verweisen, die dem Datenbankbesitzer gehört, muss die SQL-Anweisung auf verweisen dbo.customers.

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

Dieser Konstruktor kann nicht verwendet werden, um eine SqlCommand-Instanz einer SqlCacheDependency-Instanz auf einer Seite mithilfe von SQL Server 2005-Abfragebenachrichtigungen mit Ausgabezwischenspeicherung auf Seitenebene zuzuordnen.

Weitere Informationen

Gilt für:

SqlCacheDependency(String, String)

Initialisiert eine neue Instanz der SqlCacheDependency Klasse, wobei die bereitgestellten Parameter zum Erstellen einer Cacheschlüsselabhängigkeit verwendet werden.

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 Datenbank, die im Datenbankelement der Web.config Datei der Anwendung definiert ist.

tableName
String

Der Name der Datenbanktabelle, der die SqlCacheDependency Datenbanktabelle zugeordnet ist.

Ausnahmen

Fehler bei der internen Überprüfung SqlClientPermission .

-oder-

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

-oder-

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

-oder-

Beim SqlCacheDependency Objekt ist ein Berechtigungsverweigerungsfehler aufgetreten, entweder in der Datenbank oder in den gespeicherten Prozeduren der Datenbank, die das SqlCacheDependency Objekt unterstützen.

Der tableName Parameter ist Empty.

Die Abfrage ist für die SqlCacheDependency.

-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 für Änderungsbenachrichtigungen nicht aktiviert.

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

databaseEntryName ist null.

-oder-

tableName ist null.

Beispiele

Im folgenden Codebeispiel wird dieser Konstruktor verwendet, um eine Instanz der klasse SqlCacheDependency zu erstellen, die einer Datenbanktabelle mit dem Namen "Categories" in einer SQL Server Datenbank mit dem Namen 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 SqlCacheDependency-Objekte für SQL Server 7.0- und SQL Server 2000-Produkte zu erstellen.

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 Fehler ausgelöst wird, können Sie die SqlCacheDependencyAdmin.EnableNotifications Methode im Ausnahmebehandlungscode aufrufen oder das aspnet_regsql.exe Befehlszeilentool verwenden, um die Datenbank für Benachrichtigungen einzurichten. Wenn ein TableNotEnabledForNotificationException Fehler ausgelöst wird, können Sie die SqlCacheDependencyAdmin.EnableTableForNotifications Methode aufrufen oder zum Einrichten der Tabelle für Benachrichtigungen verwenden aspnet_regsql.exe .

Weitere Informationen

Gilt für: