Incapace di invalidare la cache dipende dalla query SQL
-
30-09-2019 - |
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.
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:
- controllare la notifica di un abbonamento viene creato in
sys.dm_qn_subscriptions
- , che le notifiche ottiene href="http://msdn.microsoft.com/en-us/library/ms191490.aspx" sparato
- Verificare che la notifica si consegnato (è possibile ignorare tutto sul routing e la consegna a distanza in questo link, però, dal momento SqlDependency è sempre locale)
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'