Pracoval jste nekdo se tridou SqlDependency? Nejak mi to nechce fungovat :/.
Vytvorim si tu dependency (metoda Init() z kodu nize) a pusti se mi ta udalost jen jednou, i kdyz menim data v tabulce :/.
Vystup:
cnn.State: Open
dependency_OnChange {
Info = Invalid,
Source = Statement,
Type = Subscribe
/****************************************/
cnn.State = Open
}
Kod:
public class SqlBasedCache {
SqlConnection cnn;
SqlDependency dependency;
public void Init( SqlConnection connection ) {
if (connection.State != System.Data.ConnectionState.Open) {
connection.Open();
}
this.cnn = connection;
var cmd = connection.CreateCommand();
cmd.CommandText = "SELECT LoginToken, IDAccount, IDPlayer FROM tblLoginToken";
var permission = new SqlClientPermission( System.Security.Permissions.PermissionState.Unrestricted );
permission.Demand();
this.dependency = new SqlDependency( cmd, null, 0 );
var rsltStart = SqlDependency.Start( connection.ConnectionString );
this.dependency.OnChange += new OnChangeEventHandler( dependency_OnChange );
using (var reader = cmd.ExecuteReader()) {
while (reader.Read()) {
/* do nothing */
}
}
}
void dependency_OnChange( object sender, SqlNotificationEventArgs e ) {
var sbMsg = new StringBuilder();
sbMsg.AppendLine( "dependency_OnChange {" )
.Append( "\t" ).Append( "Info = " ).Append( e.Info ).AppendLine( "," )
.Append( "\t" ).Append( "Source = " ).Append( e.Source ).AppendLine( "," )
.Append( "\t" ).Append( "Type = " ).Append( e.Type ).AppendLine()
.AppendLine( "/****************************************/" )
.Append( "\t" ).Append( "cnn.State = " ).AppendLine( cnn.State.ToString() )
.AppendLine( "}" );
var strMsg = sbMsg.ToString();
Console.WriteLine( strMsg );
}
}