using System.Collections;
using System.Collections.Specialized;
using System.IO;
//'Refer from http://www.webservertalk.com/message309144.html
using Cisso; // COM REF ixsso Control Library (Indexing services)
using ADODB; // COM REF Microsoft ActiveX Data Objects 2.7 Library C:\Program Files\Microsoft.NET\Primary Interop Assemblies\adodb.dll
public void CallVKnowledgeRemoteCatalogWithDirectoriesSpecified()
{
string CatalogName;
string[] aScopeDirectories;
CatalogName = "query://vKnowledge/LocalManyFiles";
aScopeDirectories = new string[] { @"C:\DataSamples\Indexing\TestFolder" };
QueryWithScope(CatalogName, aScopeDirectories);
aScopeDirectories = new string[] { @"C:\DataSamples\Indexing\TestFolder",@"C:\XXX" };
QueryWithScope(CatalogName, aScopeDirectories);
aScopeDirectories = new string[] { @"C:\DataSamples\Indexing\ManyFilesTest" };
QueryWithScope(CatalogName, aScopeDirectories);
aScopeDirectories = new string[] { };
QueryWithScope(CatalogName, aScopeDirectories);
aScopeDirectories = new string[] { @"C:\DataSamples\Indexing\ManyFilesTest", @"C:\DataSamples\Indexing\TestFolder" };
QueryWithScope(CatalogName, aScopeDirectories);
}
private static void QueryWithScope(string CatalogName, string[] aScopeDirectories)
{
DateTime timeStart = DateTime.Now;//to report timeout errors
//from http://groups.google.com.au/group/microsoft.public.dotnet.languages.csharp/msg/0f1f669443401cf4?hl=en
CissoQueryClass query = new CissoQueryClass();
CissoUtilClass util = new CissoUtilClass();
ADODB.Recordset rs = null;
try
{
query.Query = @"not #vpath = *\_vti_* and not #filename *.config AND {prop name=all} ""Library"" {/prop}";//qb.Query;
query.Catalog = CatalogName;
query.SortBy = "Rank [d]";//qb.SortBy;
query.Columns = "Rank, VPath, DocTitle, Filename, Characterization, Write, Path ,ClassId, DocAppName";//qb.Columns;
foreach (string sDir in aScopeDirectories)
{
util.AddScopeToQuery(query, sDir, "deep");
}
GetAndPrintRecordset(query, ref rs,10);
Trace.WriteLine(TraceHelper.TracedTimeSpanAsString(timeStart, " IXSSO timespan = "));
}
finally
{ //19/9/2005 recommended by http://www.eggheadcafe.com/forumarchives/inetserverindexserver/Aug2005/post23479438.asp
if (rs != null) Marshal.ReleaseComObject(rs); //Recordset
if (query != null) Marshal.ReleaseComObject(query); //Query
if (util != null) Marshal.ReleaseComObject(util); //Utils
query = null;
util = null;
rs = null;
}
}
private static void GetAndPrintRecordset(CissoQueryClass query, ref ADODB.Recordset rs, int MaxRecordsToPrint)
{
rs = (ADODB.Recordset)query.CreateRecordset("nonsequential");
Trace.WriteLine("rs rows=" + rs.RecordCount);
int i = 0;
while (!rs.EOF)
{
DebugHelper.PrintCurrentRow(rs, "");
rs.MoveNext();
if (i++ > MaxRecordsToPrint) break;
}
// Trace.WriteLine(TraceHelper.TracedTimeSpanAsString(timeStart, " return recordset "));
}//GetPageDataSet
And the code for workaround:
//There is a IXSSO bug: when adding single Scope, returned PATH has C:\ format, rather than UNC format
void FixScopeDirectories(string CatalogName, string[] ScopeDirectories )
{ //may be check that VPATH is empty should be done
if(CatalogName.ToLower().StartsWith("query://"))
{
if (ScopeDirectories.Length == 1)
{
List<String> lstArray = new List<string>(ScopeDirectories);
lstArray.Add(@"C:\NotExistingFolder");
ScopeDirectories = lstArray.ToArray();
}
}
}