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 자이고 대부분의 항목에 대해 루프가 훨씬 빠르게 실행됩니다. 이 경우 크래시가 발생하지 않습니다. 루프에 중단 점을 설정하고 한 번에 한 항목 씩 진행하면 충돌이 훨씬 빨리 발생하여 타이밍 문제라고 생각하게됩니다. 누구든지 검색 색인에 대한 프로그래밍 방식의 액세스와 비슷한 문제를 가지고 있으며 해결 방법을 찾았습니까?
근본적인 문제는 CLR이 오류의 원인을 얻으려고 할 때 IErrorInfo 오류를 알려주는 구성 요소가 실패한 것입니다. 따라서 무엇이 잘못되었는지 전혀 알 수 없습니다. 우리도 마찬가지입니다. 다른 컴퓨터를 사용해보십시오. –
연결을 생성 한 후 30 초가 지나면 오류가 항상 발생합니다.이 과정을 거치면 더 적은 수의 루프 이후에 오류가 발생하고 크래시 포인트가 가변적 인 이유가 여기에 있습니다. 이 모든 단서? – SimonKravis
아니요, dbase 작업이 실패하는 것은 물론 완전히 정상입니다. 연결 제한 시간을 포함하되 이에 국한되지는 않습니다. 잘못 된 것이 무엇인지 찾아 내서 적절한 예외를 생성하는 것은 잘못되었습니다. 기계를 다시 안정시켜야합니다. –