Domanda

Sto cercando di invalidare la cache in base alla variazione nelle righe del database. Ho raggiunto il successo mentre si fa la stessa cosa con LINQ con lo stesso database e la tabella ma Iam non in grado di farlo nel modo di base:

Ecco il codice che ho scritto, si prega di aiuto:

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;

    }

Sto usando SQL Server 2005 e utilizzare le query completamente qualificati che possono lavorare con la notifica di comando.

Il mio altro codice in LINQ è perfettamente funzionante con lo stesso database e la tabella, quindi non c'è nessun punto circa Service Broker o di altre autorizzazioni non impostato. Ti prego, aiutami a sbarazzarsi di questo problema.

È stato utile?

Soluzione

Questo articolo ha alcuni passaggi di risoluzione dei problemi Il notifica misterioso, insieme con una spiegazione di come funzionano le cose che aiuta in cui cercare di capire il motivo per cui qualcosa è rotto. Il tuo dovrebbe convalidare che ogni pezzo della macchina funziona:

In una nota indipendenti, è possibile utilizzare LINQ to SQL e notifiche delle query direttamente: LinqToCache .

Altri suggerimenti

La cosa migliore da fare è: Date un'occhiata al registro di SQL, se qualsiasi problema con notifiche sta accadendo, log mostrerà!

il log degli errori si trova in Programmi \ Microsoft SQL Server \ MSSQL.n \ MSSQL \ LOG \ ERRORLOG e ERRORLOG.n

Nel mio caso, il problema si è verificato a causa del ripristino del database, per risolvere, registro mi ha mostrato il problema, allora, eseguo

use DatabaseName EXEC sp_changedbowner 'sa'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top