Question

Je suis en train d'invalider le cache en fonction du changement dans les lignes de la base de données. J'ai obtenu un succès tout en faisant la même chose avec LINQ avec la même base de données et une table mais Iam pas en mesure de le faire de la manière de base:

Voici le code que je l'ai écrit, s'il vous plaît aider:

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;

    }

J'utilise Sql Server 2005 et en utilisant les requêtes qualifiés qui peuvent travailler avec notification de commande.

Mon autre code Linq fonctionne parfaitement avec la même base de données et une table, donc il n'y a pas de point sur le Service Broker ou d'autres autorisations non défini. Aidez-moi à me débarrasser de ce problème.

Était-ce utile?

La solution

Cet article a quelques étapes de dépannage mystérieuse de notification, ainsi que avec une explication comment les choses fonctionnent qui aide où essayer de comprendre pourquoi quelque chose est cassé. Votre devrait valider que chaque pièce de la machine fonctionne:

  • Vérifiez la notification d'abonnement est créé dans sys.dm_qn_subscriptions
  • vérifier qu'une notification est tiré
  • Vérifiez que la notification est livré (vous pouvez ignorer en toute sécurité tout sur le routage et la livraison à distance dans ce lien, cependant, puisque SqlDependency est toujours local)

Sur une note sans rapport, vous pouvez utiliser LINQ to SQL et notifications de requête directement: LinqToCache .

Autres conseils

La meilleure chose à faire est: Jetez un coup d'oeil sur le journal sql, en cas de problème avec les notifications se produit, journal affiche!

le journal d'erreur se trouve à Program Files \ Microsoft SQL Server \ MSSQL.n \ MSSQL \ LOG \ ERRORLOG et ERRORLOG.n

Dans mon cas, le problème est survenu en raison de la restauration de la base de données, pour résoudre, journal m'a montré le problème, alors, j'exécute

use DatabaseName EXEC sp_changedbowner 'sa'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top