Sdílet prostřednictvím


Detekce změn pomocí sqlDependency

Stáhnout ADO.NET

Objekt SqlDependency lze přidružit SqlCommand k detekci, kdy se výsledky dotazu liší od původně načtených výsledků. Delegáta můžete také přiřadit k OnChange události, která se aktivuje, když se výsledky pro přidružený příkaz změní. Před spuštěním přikazu přidružte SqlDependency ke příkazu. HasChanges Vlastnost objektu SqlDependency lze také použít k určení, jestli se výsledky dotazu od prvního načtení dat změnily.

Bezpečnostní aspekty

Infrastruktura závislostí spoléhá na SqlConnection, která se otevírá při zavolání Start, aby přijímala oznámení o tom, že se podkladová data pro daný příkaz změnila. Schopnost klienta zahájit volání SqlDependency.Start, je řízena pomocí atributů zabezpečení přístupu ke kódu SqlClientPermission. Další informace najdete v tématu Povolení oznámení dotazů.

Example

Následující kroky ukazují, jak deklarovat závislost, spustit příkaz a přijmout oznámení při změně sady výsledků:

  1. SqlDependency Zahajte připojení k serveru.

  2. Vytvořte objekty SqlConnection a SqlCommand pro připojení k serveru a definování příkazu Transact-SQL.

  3. Vytvořte nový SqlDependency objekt nebo použijte existující objekt a vytvořte vazbu s objektem SqlCommand . Interně toto přidružení vytvoří SqlNotificationRequest objekt a podle potřeby ho sváže s objektem příkazu. Tato žádost o oznámení obsahuje interní identifikátor, který jednoznačně identifikuje tento SqlDependency objekt. Spustí se také naslouchací proces klienta, pokud ještě není aktivní.

  4. Přiřaďte obsluhu události pro událost OnChange objektu SqlDependency.

  5. Spusťte příkaz pomocí některé z Execute metod objektu SqlCommand . Vzhledem k tomu, že příkaz je svázán s objektem oznámení, server rozpozná, že musí vygenerovat oznámení, a informace o frontě bude odkazovat na frontu závislostí.

  6. SqlDependency Zastavte připojení k serveru.

Pokud některý uživatel potom změní podkladová data, Microsoft SQL Server zjistí, že na takovou změnu čeká oznámení, a odešle oznámení, které je zpracováno a předáno klientovi prostřednictvím podkladového SqlConnection kódu vytvořeného voláním SqlDependency.Start. Klientský posluchač obdrží zprávu o zneplatnění. Klientský naslouchací proces pak vyhledá přidružený SqlDependency objekt a aktivuje OnChange událost.

Následující fragment kódu ukazuje vzor návrhu, který byste použili k vytvoření ukázkové aplikace.

void Initialization()
{
    // Create a dependency connection.
    SqlDependency.Start(connectionString, queueName);
}

void SomeMethod()
{
    // Assume connection is an open SqlConnection.

    // Create a new SqlCommand object.
    using (SqlCommand command=new SqlCommand(
        "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers",
        connection))
    {

        // Create a dependency and associate it with the SqlCommand.
        SqlDependency dependency=new SqlDependency(command);
        // Maintain the reference in a class member.

        // Subscribe to the SqlDependency event.
        dependency.OnChange+=new
           OnChangeEventHandler(OnDependencyChange);

        // Execute the command.
        using (SqlDataReader reader = command.ExecuteReader())
        {
            // Process the DataReader.
        }
    }
}

// Handler method
void OnDependencyChange(object sender,
   SqlNotificationEventArgs e )
{
  // Handle the event (for example, invalidate this cache entry).
}

void Termination()
{
    // Release the dependency.
    SqlDependency.Stop(connectionString, queueName);
}

Další kroky