Estoy intentando ejecutar una consulta desde ADO.NET utilizando SQL Server 2008R2. Estoy usando un CTE para proporcionar paginación y agregar parámetros para @Offset
y @Limit
, que son ambos enteros.Tiempo de espera ADO.NET pero funciona bien en SSMS
Estoy construyendo una consulta parametrizada en función de las entradas del usuario. El resultado final es la siguiente:
;WITH Results_CTE AS (
SELECT ld.* , ROW_NUMBER() OVER (ORDER BY Key_Field) AS RowNum
FROM list..List_Data ld
WHERE VALUE_2010 IS NOT NULL
AND Postcode LIKE @Postcode + '%'
) SELECT * FROM Results_CTE
WHERE RowNum > @Offset AND RowNum < @Offset + @Limit
OPTION (RECOMPILE)
estoy usando unos pocos como cláusulas que es por eso que tengo OPTION RECOMPILE
. Si Declaro los parámetros a través de SSMS y correr así:
declare @postcode varchar(10) = 'SW1 1AA';
declare @Offset int = 0;
declare @Limit int = 10;
consigo un tiempo de respuesta muy rápida (menos de 1 segundo). Si intento esto con ADO.NET, sin embargo, lleva una eternidad. He intentado añadir los parámetros con los dos siguientes:
cmd.Parameters.AddWithValue("@Offset", startRowIndex) // times out
cmd.Parameters.AddWithValue("@Limit", limit)
cmd.Parameters.Add(New SqlParameter("@Offset", SqlDbType.BigInt)) // also times out
cmd.Parameters.Item("@Offset").Value = startRowIndex
cmd.Parameters.Add(New SqlParameter("@Limit", SqlDbType.BigInt))
cmd.Parameters.Item("@Limit").Value = limit
Si sólo hay unas pocas filas devueltas por la primera consulta y aunque me cae el filtrado @Offset
y @Limit
, consigo un tiempo de respuesta decente. ¿Hay alguna manera de acelerar esto? y ¿usar paginación?
EDIT: Estoy de paso en el parámetro @postcode
(que es una cadena de .NET a través de este:
cmd.Parameters.AddWithValue("@Postcode", normalizedPostcode)
@close voter. Esto no es un engaño. La pregunta anterior trataba sobre la explicación de diferentes comportamientos con variables, no con parámetros. Los dos son tratados de forma diferente por SQL Server. –
¿Puedes mostrar el código donde pasas en el parámetro '@ postcode'? –
¿Definitivamente es el tiempo de espera de SQL? No hay posibilidad de que se agote el tiempo tratando de obtener una conexión (por ejemplo, porque tienes un montón de conexiones abiertas cuando haces esto) o cualquier otra cosa así? – Chris