Domanda

Dopo molte ore, ho finalmente capito che sto lavorando in modo corretto con l'oggetto Cache nella mia applicazione ASP.NET ma i miei stored procedure impedisce di funzionare correttamente.

Questa stored procedure funziona correttamente:

CREATE PROCEDURE [dbo].[ListLanguages]
@Page INT = 1,
@ItemsPerPage INT = 10,
@OrderBy NVARCHAR (100) = 'ID',
@OrderDirection NVARCHAR(4) = 'DESC'
AS
BEGIN
    SELECT ID, [Name], Flag, IsDefault FROM dbo.Languages
END

Ma questo (quello che volevo) non lo fa:

CREATE PROCEDURE [dbo].[ListLanguages]
@Page INT = 1,
@ItemsPerPage INT = 10,
@OrderBy NVARCHAR (100) = 'ID',
@OrderDirection NVARCHAR(4) = 'DESC',
@TotalRecords INT OUTPUT
AS
BEGIN
    SET @TotalRecords = 10

EXEC('SELECT ID, Name, Flag, IsDefault FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY ' + @OrderBy + ' ' + @OrderDirection + ') as Row, ID, Name, Flag, IsDefault
    FROM dbo.Languages) results
    WHERE Row BETWEEN ((' + @Page + '-1)*' + @ItemsPerPage + '+1) AND (' + @Page + '*' + @ItemsPerPage + ')')
END

Ho dato le @TotalRecords parametro il valore 10 in modo da poter essere sicuri che il problema non è dalla funzione COUNT (*), che so che non è supportato bene.

Inoltre, quando l'eseguo da SQL Server Management Studio, che fa esattamente quello che dovrebbe fare. Nell'applicazione ASP.NET i risultati vengono recuperati correttamente, solo la cache è in qualche modo in grado di lavorare!

Potete per favore aiutare?

Forse un suggerimento

Credo che la ragione per cui la dipendenza HasChanged proprietà è legata al fatto che la riga colonna generata dalla ROW_NUMBER è solo temporaneo e, di conseguenza, il server SQL non è in grado di dire se i risultati sono cambiati o meno. Ecco perché HasChanged è sempre impostata su true.

Qualcuno sa come impaginare i risultati da SQL Server senza utilizzare le funzioni di conteggio o ROW_NUMBER?

È stato utile?

Soluzione 2

Sql cache di dipendenza per .NET 3.5 funziona solo per le query semplici. Forse .NET 4 mi sorprende.

Altri suggerimenti

non è sufficiente dimensione della cache.

1 - Si può copiare e incollare il codice che effettivamente utilizzate per memorizzare nella cache i risultati di tale sproc? 2 - Hai provato uno sProc in cui si utilizza di query direttamente al posto di EXEC-zione di una stringa

?

Si # 2 significa che non è possibile modificare la struttura della query al volo :-), ma a meno che non si sta calcolando i vostri propri criteri di caching a # 1, che è la regola della cache è necessario rispettare in generale. Nessun meccanismo di caching è mai andare a analizzare una stringa da EXEC da voi.

EXEC-zione di una stringa in uno sProc fa che sproc un lancio totale di una moneta su ogni gestiscono anche per sé SQL Server. Inoltre lascia si apre agli attacchi di iniezione di script in quanto la query è ancora composto da stringhe in fase di esecuzione - non è diverso da comporre l'intera stringa in C # e di passarlo a sproc a "Basta eseguire tutto ciò che è dentro"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top