2014-09-10 3 views
0

C# (OleDB 액세스)의 Windows 검색 API를 사용하여 로컬 컴퓨터 (Windows 8.1) 검색 색인의 모든 색인 항목을 다음 C# 코드 : 내가 찾을IErrorInfo.GetDescription이 OleDB를 통해 Windows Search API를 사용하여 E_FAIL (0x80004005)과 함께 실패했습니다.

string query = @"SELECT System.ItemNameDisplay,SYSTEM.ITEMURL,System.DateModified, System.ItemName, System.Search.AutoSummary,System.Search.GatherTime FROM SystemIndex";

query = query + "WHERE System.Search.GatherTime > '" + LastRunTime.ToString("yyyy-MM-dd h:mm:ss") + "' Order by System.Search.GatherTime Desc";

 string connectionString = "Provider=Search.CollatorDSO;ExtendedProperties=\"Application=Windows\""; 

     OleDbConnection connection = new OleDbConnection(connectionString); 
     connection.Open(); 
     OleDbCommand command;   
     command = new OleDbCommand(query, connection); 
     Cursor.Current = Cursors.WaitCursor;   
     reader = command.ExecuteReader(); 
     int iResults = 0; 
     int iSummaries = 0; 
     string sDate = ""; 
     string sText = ""; 
     string sFile = ""; 

      while (reader.Read()) 
      { 
       try 
       { 
        sText = reader.GetValue(4).ToString(); 
        sFile = reader.GetString(1); 
        sDate = reader.GetDateTime(5).ToString(); 
        Debug.Print(iResults + " " + sFile + " " + sDate); 
        //if (sText != "") { Debug.Print(sText); iSummaries++; } 
       } 
       catch (Exception Ex) 
       { 
        MessageBox.Show(Ex.Message); 
       } 
       iResults++; 
      } 
     ` 

그 코드는 IErrorInfo.GetDescription 위트 실패 오류가있는 While(Reader.Read()) 라인에 비 재현 적 충돌이 있음 h E_FAIL (0x80004005). 루프는 76,080 개의 항목 중 약 55,000 개를 처리합니다. 내가 sText = reader.GetValue(4).ToString();을 주석 처리하면 Autosummary 필드가 약 1000 자이고 대부분의 항목에 대해 루프가 훨씬 빠르게 실행됩니다. 이 경우 크래시가 발생하지 않습니다. 루프에 중단 점을 설정하고 한 번에 한 항목 씩 진행하면 충돌이 훨씬 빨리 발생하여 타이밍 문제라고 생각하게됩니다. 누구든지 검색 색인에 대한 프로그래밍 방식의 액세스와 비슷한 문제를 가지고 있으며 해결 방법을 찾았습니까?

+0

근본적인 문제는 CLR이 오류의 원인을 얻으려고 할 때 IErrorInfo 오류를 알려주는 구성 요소가 실패한 것입니다. 따라서 무엇이 잘못되었는지 전혀 알 수 없습니다. 우리도 마찬가지입니다. 다른 컴퓨터를 사용해보십시오. –

+0

연결을 생성 한 후 30 초가 지나면 오류가 항상 발생합니다.이 과정을 거치면 더 적은 수의 루프 이후에 오류가 발생하고 크래시 포인트가 가변적 인 이유가 여기에 있습니다. 이 모든 단서? – SimonKravis

+0

아니요, dbase 작업이 실패하는 것은 물론 완전히 정상입니다. 연결 제한 시간을 포함하되 이에 국한되지는 않습니다. 잘못 된 것이 무엇인지 찾아 내서 적절한 예외를 생성하는 것은 잘못되었습니다. 기계를 다시 안정시켜야합니다. –

답변

0

쿼리와 함께 OLEdb 명령을 정의한 후 CommandTimeOut을 0으로 설정하면 문제가 해결 된 것 같습니다.

관련 문제