문제

레코드의 하위 집합을 반환해야하며 다음 명령을 사용합니다.

using (SqlCommand command = new SqlCommand(
                    "SELECT ID, Name, Flag, IsDefault FROM (SELECT ROW_NUMBER() OVER (ORDER BY @OrderBy DESC) as Row, ID, Name, Flag, IsDefault FROM dbo.Languages) results WHERE Row BETWEEN ((@Page - 1) * @ItemsPerPage + 1) AND (@Page * @ItemsPerPage)",
                    connection))

나는 다음과 같이 선언 된 sqlcachedependency를 설정했습니다.

SqlCacheDependency cacheDependency = new SqlCacheDependency(command);

그러나 명령을 실행 직후에 executereader () 명령 해산되었습니다 어떤 식 으로든 쿼리 결과를 변경하지는 않았지만 SQLCachedependency 객체의 기본 속성이 사실이됩니다! 이 때문에이 쿼리의 결과는 캐시에 보관되지 않습니다.

HttpRuntime.Cache.Insert( cacheKey, list, cacheDependency, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(AppConfiguration.CacheExpiration.VeryLowActivity));

명령에 2 개의 SELECT 문이 있기 때문입니까? row_number ()입니까? 그렇다면 결과를 척추 할 수있는 다른 방법이 있습니까?

도와주세요! 너무 많은 시간 후에, 약간 감사하겠습니다! 고맙습니다

도움이 되었습니까?

해결책

동일한 문제를 겪고 도움없이 온라인으로 동일한 답변을 찾아서 프로파일 러의 XML 유효하지 않은 하위 분류 응답을 다시 검색했습니다.

MSDN 지원 사이트에서 약간 다른 코드 순서가있는 예를 찾았습니다. 내가 시도했을 때 나는 문제를 깨달았다 - 명령 객체와 캐시 종속성 객체를 만든 후까지 연결 객체를 열지 마십시오. 다음은 따라야 할 순서가 있으며 모두가 좋습니다.

  1. 알림 (SQLCAHCEDENCENCENDENCYADMIN)을 활성화하고 sqldependency를 실행하십시오.
  2. 연결 객체를 만듭니다
  3. 명령 개체를 작성하고 명령 텍스트, 유형 및 연결 개체 (생성자의 조합, 속성 설정 또는 CreateCommand를 사용)를 할당합니다.
  4. SQL 캐시 종속성 객체를 만듭니다
  5. 연결 객체를 엽니 다
  6. 쿼리를 실행하십시오
  7. 종속성을 사용하여 캐시에 항목을 추가하십시오.

이 순서를 따르고 Select 문의 다른 모든 요구 사항을 따르면 권한 문제가 없으면 작동합니다!

이 문제는 .NET 프레임 워크가 연결을 관리하는 방법, 특히 설정된 설정을 관리하는 방법과 관련이 있다고 생각합니다. SQL 명령 테스트에서 이것을 재정의하려고 시도했지만 결코 효과가 없었습니다. 이것은 단지 추측 일뿐입니다 - 내가 아는 것은 즉시 문제를 해결 한 순서를 바꾸는 것입니다.

다음에서 MSDN 게시물에 이르기까지 함께 조각 할 수있었습니다.

이 게시물은 유효하지 않은 구독의 가장 일반적인 원인 중 하나이며 .NET 클라이언트가 알림과 대조적으로 속성을 설정하는 방법을 보여줍니다.

https://social.msdn.microsoft.com/forums/en-us/cf3853f3f3-0ea1-41B9-987E-9922E5766066/changing-Set-Options-Options-Forced-by-net?forum=adodoTnetDataproviders

그런 다음이 게시물은 저처럼 코드를 가장 간단한 형식으로 줄인 사용자로부터 왔습니다. 나의 원래 코드 패턴은 그의와 비슷했다.

https://social.technet.microsoft.com/forums/windows/en-us/5a29d49b-8c2c-4fe8-b8de-d632a3f60f68/subscriptions-always-invalid-usual-suspects-checked-no-joy?

그런 다음이 게시물을 발견했습니다. 문제를 매우 간단하게 줄였습니다. 테이블의 2 부 이름이 필요한 간단한 문제였습니다. 그의 경우 제안은이 문제를 해결했다. 그의 코드를 살펴본 후 나는 주요 차이가 명령 개체와 종속성 객체가 생성 될 때까지 연결 객체를 열기를 기다리고 있음을 알았습니다. 나의 유일한 가정은 후드 아래에있다 (나는 아직 반사판을 시작하지 않았다.

https://social.msdn.microsoft.com/forums/sqlserver/en-us/bc9ca094-a989-4403-82c6-7f608ed462ce/sql-server-not-screating-subscription-for-simple-select-when- sqlCachedependency 사용? 포럼 = SQLServiceBroker

이것이 비슷한 문제에서 다른 사람에게 도움이되기를 바랍니다.

다른 팁

단지 추측이지만 SELECT 진술에는 없습니다 ORDER BY 절?

명시 적 순서를 지정하지 않으면 쿼리가 실행할 때마다 순서로 결과를 반환 할 수 있습니다. 어쩌면 이것이 원인 일 것입니다 SqlCacheDependency 결과가 바뀌 었다고 생각하는 대상.

추가 해보세요 ORDER BY 절:

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

나는 sqlcachedependency에 대한 전문가가 아닙니다. 사실, 나는 내 자신의 문제에 대한 답을 찾는 동안이 질문을 발견했습니다! 그러나 SQLCachedependency가 작동하지 않는 이유는 SQL에 중첩 된 하위 쿼리가 포함되어 있기 때문입니다.

SQL에서 사용할 수있는 것/사용할 수없는 내용을 나열하는 문서를 살펴보십시오. 알림을위한 쿼리 작성

".... 진술에는 하위 쿼리, 외부 조인 또는자가 주인이 포함되어서는 안됩니다 ....."

또한 Redgate의 한 남자로부터 귀중한 문제 해결 정보를 찾았습니다. SQL 2005 쿼리 알림 사용 및 모니터링 그로 인해 내 자신의 문제를 해결하는 데 도움이되었습니다. SQL 프로파일 러를 사용하여 그가 제안한 QN 이벤트를 추적함으로써 'Set Arithabort Off'옵션을 사용하여 연결이 잘못되어 알림이 실패했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top