Frage

Ich versuche, den Cache ungültig zu machen, auf die Veränderung in den Zeilen der Datenbank basiert. Ich habe Erfolg erzielt, während die gleiche Sache mit Linq mit der gleichen Datenbank tun und Tabelle aber Iam nicht in der Lage es in der Grunde Art und Weise zu tun:

Hier ist der Code, dass ich geschrieben habe, bitte helfen:

public DataSet GetData(string sqlCmd)
    {
        string connectionStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
        string cacheKey = "test123";
        DataSet ds = (DataSet)HttpRuntime.Cache.Get(cacheKey);
        if (ds != null)
        {
            return ds;
        }
        SqlCacheDependency sqldep = null;
        SqlConnection conn = new SqlConnection(connectionStr);
        SqlCommand cmd = new SqlCommand(sqlCmd, conn);
        cmd.Notification = null;
        cmd.NotificationAutoEnlist = true;
        SqlDataAdapter sqlAd = new SqlDataAdapter(cmd);
        ds = new DataSet();
        sqlAd.Fill(ds);

        System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(connectionStr);
        string NotificationTable = "TblMetaData";
        if (!System.Web.Caching.SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionStr).Contains(NotificationTable))
            System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(connectionStr, NotificationTable);
        sqldep = new SqlCacheDependency(cmd);

        HttpRuntime.Cache.Insert(cacheKey, ds, sqldep);
        return ds;

    }

Ich bin mit SQL Server 2005 und unter Verwendung der vollständig qualifizierten Abfragen, die mit dem Befehl Benachrichtigung arbeiten können.

Mein anderer Code in Linq perfekt arbeitet mit der gleichen Datenbank und Tabelle, so gibt es keinen Punkt, um den Service Broker oder andere Berechtigungen nicht gesetzt. Bitte helfen Sie mir dieses Problem loszuwerden.

War es hilfreich?

Lösung

Dieser Artikel hat einige Schritte zur Fehlerbehebung Mysteriöse Mitteilung zusammen mit einer Erklärung, wie die Dinge funktionieren, das hilft, wo etwas versuchen zu verstehen, warum gebrochen. Ich sollte bestätigen, dass jedes Stück der Maschine funktioniert:

  • Überprüfen Sie das eine Abonnement-Benachrichtigung erstellt wird in sys.dm_qn_subscriptions
  • Überprüfen Sie, ob eine Benachrichtigung erhält gefeuert
  • Überprüfen Sie, ob die Benachrichtigung erhält geliefert (Sie sicher alles ignorieren über Routing und Remote-Übermittlung in dieser Verbindung, obwohl, da SqlDependency immer lokal ist)

Auf einem nicht verwandten Notiz, können Sie LINQ to SQL und Abfragebenachrichtigungen direkt: LinqToCache .

Andere Tipps

Das Beste, was zu tun ist: Werfen Sie einen Blick auf die SQL-Protokoll, wenn irgendein Problem mit Benachrichtigungen geschieht, wird log zeigen!

das Fehlerprotokoll befindet sich an Programme \ Microsoft SQL Server \ MSSQL.n \ MSSQL \ LOG \ ERRORLOG und ERRORLOG.n

In meinem Fall das Problem wegen der Wiederherstellung der Datenbank aufgetreten ist, zu lösen, log zeigte mir das Problem, dann führe ich

use DatabaseName EXEC sp_changedbowner 'sa'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top