Pregunta

Estoy tratando de invalidar la caché basado en el cambio en las filas de la base de datos. He logrado un éxito mientras se hace lo mismo con LINQ con la misma base de datos y tabla, pero Iam no es capaz de hacerlo en la forma básica:

Este es el código que he escrito, por favor ayuda:

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;

    }

Estoy utilizando SQL Server 2005 y el uso de las consultas totalmente cualificados que pueden trabajar con la notificación de comandos.

Mi otro código en LINQ está perfectamente trabajando con la misma base de datos y la tabla, por lo que no hay un punto sobre el corredor de servicio u otros permisos no establecido. Me puede ayudar a deshacerse de este problema.

¿Fue útil?

Solución

Este artículo tiene algunos pasos para solucionar problemas El Notificación misterioso, a lo largo de con una explicación de cómo funcionan las cosas que ayuda en tratar de entender por qué algo se rompe. Su debe validar que cada pieza de la maquinaria funciona:

En una nota relacionada, puede utilizar LINQ a SQL y las notificaciones de consulta directa: LinqToCache .

Otros consejos

Lo mejor que puede hacer es: echar un vistazo en el registro de SQL, si cualquier problema con las notificaciones está sucediendo, registro mostrará!

el registro de errores se encuentra en Archivos de programa \ Microsoft SQL Server \ MSSQL.n \ MSSQL \ LOG \ ERRORLOG y ERRORLOG.n

En mi caso, el problema se produjo debido a la restauración de la base de datos, para resolver, registro me mostró el problema, a continuación, ejecuto

use DatabaseName EXEC sp_changedbowner 'sa'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top