Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Egy SqlDependency objektum társítható egy SqlCommand olyan objektumhoz, amely észleli, ha a lekérdezés eredményei eltérnek az eredetileg lekért eredményektől. Delegáltat is hozzárendelhet az OnChange eseményhez, amely akkor aktiválódik, ha egy társított parancs eredményei megváltoznak. A SqlDependency-t társítsa a parancshoz, mielőtt végrehajtja azt. A HasChanges tulajdonság használatával SqlDependency azt is megállapíthatja, hogy a lekérdezés eredményei megváltoztak-e az adatok első lekérése óta.
Biztonsági szempontok
A függőségi infrastruktúra egy SqlConnection olyan megnyitott infrastruktúrára támaszkodik, amely akkor nyílik meg, amikor Start a rendszer értesítéseket küld arról, hogy az alapul szolgáló adatok megváltoztak egy adott parancs esetében. Az ügyfél képessége arra, hogy kezdeményezze a hívást SqlDependency.Start, a SqlClientPermission használatával és a kódhozzáférési biztonsági attribútumokkal szabályozható. További információ: Lekérdezési értesítések engedélyezése.
Example
Az alábbi lépések bemutatják, hogyan deklarálhat függőséget, hogyan hajthat végre egy parancsot, és hogyan kaphat értesítést az eredményhalmaz változásairól:
Kezdeményezze a
SqlDependencykapcsolatot a kiszolgálóval.Hozzon létre SqlConnection és SqlCommand objektumokat a kiszolgálóhoz való csatlakozáshoz, valamint definiáljon egy Transact-SQL utasítást.
Hozzon létre egy új
SqlDependencyobjektumot, vagy használjon egy meglévőt, és kösse azSqlCommandobjektumhoz. Ez a társítás belsőleg létrehoz egy SqlNotificationRequest objektumot, és szükség szerint a parancsobjektumhoz köti. Ez az értesítési kérelem egy belső azonosítót tartalmaz, amely egyedileg azonosítja ezt azSqlDependencyobjektumot. Akkor is elindítja az ügyfélfigyelőt, ha még nem aktív.Iratkozzon fel egy eseménykezelőt az
OnChangeSqlDependencyobjektum eseményére.Hajtsa végre a parancsot az
ExecuteSqlCommandobjektum bármely metódusával. Mivel a parancs az értesítési objektumhoz van kötve, a kiszolgáló felismeri, hogy létre kell hoznia egy értesítést, és az üzenetsor adatai a függőségek üzenetsorára fognak mutatni.Állítsa le a
SqlDependencykapcsolatot a kiszolgálóval.
Ha bármely felhasználó módosítja az alapul szolgáló adatokat, a Microsoft SQL Server észleli, hogy értesítés van függőben az ilyen változásokra, és közzétesz egy értesítést, amelyet a rendszer feldolgoz és továbbít az ügyfélnek a SqlDependency.Start hívásával létrehozott mögöttes SqlConnection keresztül. Az ügyfélfigyelő megkapja az érvénytelenítési üzenetet. Az ügyfélfigyelő ezután megkeresi a társított SqlDependency objektumot, és aktiválja az eseményt OnChange .
Az alábbi kódrészlet azt a tervezési mintát mutatja be, amelyet mintaalkalmazás létrehozásához használna.
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);
}