Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 parancs végrehajtása előtt társítania kell a SqlDependency-t a parancshoz. 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 olyan SqlConnection-re támaszkodik, amely akkor nyílik meg, amikor a Start hívást kezdeményezi annak érdekében, hogy értesítéseket kapjon arról, ha az alapul szolgáló adatok megváltoznak egy adott parancs esetén. Az ügyfél azon képességét, hogy kezdeményezhesse a hívás indítását SqlDependency.Start , a kódhozzáférési SqlClientPermission biztonsági attribútumok használatával szabályozható. További információ: Lekérdezésértesítések és kódhozzáférési biztonság és ADO.NET engedélyezése.
Példa
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:
Indítson
SqlDependencykapcsolatot a kiszolgálóval.Hozzon létre SqlConnection és SqlCommand objektumokat a kiszolgálóhoz való csatlakozáshoz, és 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 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ó később módosítja az alapul szolgáló adatokat, a Microsoft SQL Server észleli, hogy egy értesítés függőben van egy ilyen változásra vonatkozóan, és közzéten egy értesítést, amelyet a rendszer a hívással SqlConnectionlétrehozott mögöttes SqlDependency.Start üzeneten keresztül feldolgoz és továbbít az ügyfélnek. 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.
Sub Initialization()
' Create a dependency connection.
SqlDependency.Start(connectionString, queueName)
End Sub
Sub SomeMethod()
' Assume connection is an open SqlConnection.
' Create a new SqlCommand object.
Using command As New SqlCommand( _
"SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", _
connection)
' Create a dependency and associate it with the SqlCommand.
Dim dependency As New SqlDependency(command)
' Maintain the reference in a class member.
' Subscribe to the SqlDependency event.
AddHandler dependency.OnChange, AddressOf OnDependencyChange
' Execute the command.
Using reader = command.ExecuteReader()
' Process the DataReader.
End Using
End Using
End Sub
' Handler method
Sub OnDependencyChange(ByVal sender As Object, _
ByVal e As SqlNotificationEventArgs)
' Handle the event (for example, invalidate this cache entry).
End Sub
Sub Termination()
' Release the dependency
SqlDependency.Stop(connectionString, queueName)
End Sub
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);
}