2011-02-01 5 views
1

이 질문은 Visual C# .NET 프로그램의 Cisso.dll interop 라이브러리Indexing Services (Dialect 2) 및 IixssoQuery interface을 사용합니다.Microsoft 인덱싱 서비스 Cisso.dll interop 라이브러리 : 4 바이트 정수의 상한선?

vt_i8 데이터 유형 (8 바이트)로 정의 색인의 열 그러나 상호 운용성 라이브러리의 CreateRecordSet 방법은 항상 2,147,483,648 범위 한도 이상의 아무것도 절단, 4 개 바이트 정수의 숫자 열을 갖는 레코드 집합을 반환있다.

이상적으로 우리는 interop 라이브러리에서 C# int System.Int32 (4 바이트) 대신 C# long System.Int64 (8 바이트)를 가져와야합니다.

다음 코드 샘플 (주로 조그 메모리에 제공됨)은 Cisso.dll을 사용하여 레코드 세트를 가져와 DataTable을 채우고 잘린 정수로 데이터 테이블을 반환합니다.

CissoQueryClass cqc = new Cisso.CissoQueryClass(); 
RecordSet rs = new RecordSet(); 
cqc.Columns = "Rank, DocTitle, VPath, Filename, Characterization,Write"; 
// ... setup ... 
var myDs = new DataSet(); 
oldDbAdapter.Fill(myDs, cqc.CreateRecordSet("nonsequential"), "IXResults"); 
return myDs; 

우리는 cqc. DefineColumn(..) 메서드를 사용하여 데이터 유형 등을 재생하지만 아무런 효과가 없습니다. 잘린 정수의 동작에는 변화가 없습니다.

이 정수 자르기가 CISSO interop 라이브러리의 제한 사항인지 또는 더 큰 정수 값을 가져올 수 있는지 그리고 그 방법을 모르는지 알고 싶습니다.

나는 누군가 여기 비슷한 문제에 직면했을 것이라고 확신한다. 이번에 인터넷 검색을하는 것은 매우 짧습니다.


우리는 인덱스 내부의 데이터를 기반으로 해결책을 발견 : 우리는 우리가 다른 문자열 필드에서 필요한 풀과에서 번호를 구문 분석 할 수있어. 이상적이지는 않지만 해결 방법입니다.

+0

당신은 Win2000 클라이언트 이전 버전을 위해 글을 쓰고 있습니까? 내가 묻는 이유는 그것이 XP에서 가치가 하락한 것으로 나타났습니다. –

+0

우리가 사용하고있는 제품 (Ektron http://www.ektron.com/)은 비추천 기술을 기반으로하고 있기 때문에이 기술을 사용해야합니다. –

+0

그건 짜증. 몇 가지 세부 사항이 있는데 대답을하고 있지만 XP VM을 만들어야했습니다. 그것의 자유 시간을 꽤 많이 잡았지만, 그 좋은 수수께끼. –

답변

0

네, 나는 당신처럼 붙어 있습니다. 최대 OLE DB 열의 길이가 32 비트 (oledb.h)의 ULONG 인 것처럼 보이지만 ixsso 구현은 서명 된 것으로 간주됩니다. 먼저 VS의 데이터베이스 연결에 데이터 소스를 마운트하여 테이블 스키마에 접근 할 수 있다고 생각했습니다. 그 때 검색의 "사용자 지정"쿼리 기능을 발견했습니다. 그 길은 너무 많습니다.

나는 구현에 .net RCW를 걸어 내려고했지만, ixsso.dll에 대한 디버그 기호를 찾을 수 없어서, 진단을 위해 충분히 작은 asm 블록을 얻을 수 없었다.

DefineColumns (원시 COM 인터페이스) 기능이 기본 스키마 저장소의 값을 제한하고 그에 대해 할 수있는 일이 없다는 것이 가장 좋습니다. 당신이 이미 추론 한 것과 비슷한 이유로.

행운을 빈다. 죄송하지만이 문제를 해결할 수 없습니다. 나는 그 가치가 떨어 졌기 때문에 기쁘다 ....