Output cache e dati nel db

domenica 29 giugno 2008 - 20.48

Giovanni_3478 Profilo | Senior Member

Ciao

[C#, aspnet 3.5]


In una pagina aspx sto usando la direttiva OutputCache
<%@ OutputCache Duration="86400" Location="any" VaryByParam="none" %>

Nella stessa pagina c'è una connessione al db con il controllo Sqldatasource
e un controllo ListView.

Con l'outputcache viene mostrata sempre la stessa pagina fino alla durata della cache
quindi anche se modifico i dati nel db appaiono sempre gli stessi dati:
c'è un modo per usare l'output cache
facendo però rigenerare la pagina quando vengono modificati i dati nel db

rossimarko Profilo | Guru

Ciao,

se la tua esigenza è quella di ricaricare i dati solo quando vengono modificati su db allora ti consiglio di guardare la SqlDependency: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx

Però occhio che funziona solo con sql server. Qui puoi trovare un tutorial: http://quickstarts.asp.net/QuickStartv20/aspnet/doc/caching/SQLInvalidation.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Giovanni_3478 Profilo | Senior Member

Ciao

Ho attivato l'sqlcacheDependency:
ho usato un linkbutton e al click eseguo questo codice
protected void AttivaSqlcache(object sender, EventArgs e)
{
System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString, "Table1");
}

Dopo di che ho inserito nella pagina <%@ OutputCache Duration="86400" Location="any" VaryByParam="none" SqlDependency="connstr:Table1" %>

Non mi resituisce errori,
ma non funziona: cioè quando inserisco i dati nel db la pagina continua a visualizzare la pagina cache-ata.

Cosa ho sbagliato?

rossimarko Profilo | Guru

Hai già verificato i seguenti punti?

Common issues that prevent queries from working with Sql Server 2005 query notifications are:

1. Queries must explicitly include column names in the SELECT statement. Using "SELECT *" results in a query that will not be registered with Sql Server 2005 query notifications.
2. Table names in queries must include the ownername. For example, if you issue a query against the authors table in the pubs database, the query must reference the table as "dbo.authors".
3. The security identity running the query must have rights to register queries for notification in Sql Server 2005. This right can be granted with the following T-SQL command: GRANT SUBSCRIBE QUERY NOTIFICATIONS TO username.
4. The security identity running the query must also have rights to send query notifications from Sql Server 2005. This right can be granted with the following T-SQL command: GRANT SEND ON SERVICE::SqlQueryNotificationService TO username.

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Giovanni_3478 Profilo | Senior Member

Devo applicare questi 4 accorgimenti

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO mioUsername; SELECT data, titolo, comunicazione from dbo.Table1

Mi restituisce un errore
Cannot find the user 'mioUsername', because it does not exist or you do not have permission.

Ho sbagliato qualcosa nella sintassi sopra?

rossimarko Profilo | Guru

No, dice semplicemente che lo username non esiste. Tu l'hai creato a livello di login sql e gli hai dato l'accesso al tuo db?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Giovanni_3478 Profilo | Senior Member

Io per connettermi al db uso una connectionString che non mi restituisce errori

Quello che dici tu non l'ho fatto

Come devo farlo?

rossimarko Profilo | Guru

Lo script

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO mioUsername

lo devi eseguire direttamente su sql, una sola volta. Lo devi fare all'interno dell'ambiente di sql. Che versione stai utilizzando? Sql 2005? 2005 express?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Giovanni_3478 Profilo | Senior Member

Sql 2005

rossimarko Profilo | Guru

Allora lo script

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO mioUsername

lo devi lanciare all'interno di una query fatta da Sql Server Management Studio.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Giovanni_3478 Profilo | Senior Member



Ho chiesto al mio hoster se è possibile lanciare questo script nel loro db
che è Sqlserver 2005
ed quello che uso io nei miei siti.

Mi hanno detto di no.

Grazie mille per l'aiuto.
Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5