Is it possible to use a SQLite database as the basis for creating a Query Layer in an ArcGIS Engine application starting with ArcGIS 10.2?The ArcGIS 10.2 Help on Query Layers has been updated to specify the use of the Teradata databases (newly-supported in ArcGIS 10.2).Other portions of ArcGIS 10.2 Help mention SQLite, but the Query Layers documentation is notably silent on SQLite.The code fragment below shows an example of what would seem to be a potential approach (based on an existing method for creating a Query Layer against other database types).But I have not been able to locate any documentation on how to populate the PropertySet to establish a connection to a SQLite database.
// Code fragment for creating a feature layer for a Query Layer in ArcGIS Engine.
// Environment: Visual C++, MFC, Visual Studio 2010
IWorkspaceFactory2Ptr pWorkspaceFactory2 = NULL;
IWorkspacePtr pWorkspace = NULL;
ISqlWorkspacePtr pSqlWorkspace = NULL;
IQueryDescriptionPtr pQueryDescription = NULL;
ITablePtr pTableForSQL = NULL;
IFeatureClassPtr pFeatureClassForSQL = NULL;
IFeatureLayerPtr pFeatureLayer = NULL;
IPropertySetPtr pPropertySet = NULL;
OLE_HANDLE hWnd = 0;
HRESULT hr = S_OK;
// Note: All error handling removed from the sample code.
pWorkspaceFactory2.CreateInstance(CLSID_SdeWorkspaceFactory);
pPropertySet.CreateInstance(CLSID_PropertySet);
// ... Q: How to populate the PropertySet appropriately for a SQLite database(?)
//
// Once the Property Set is populated, open the workspace.
hr = pWorkspaceFactory2->Open(pPropertySet, hWnd, &pWorkspace);
// QI to get the ISqlWorkspace interface pointer
pSqlWorkspace = pWorkspace;
// Pass the incoming SQL query text on to ArcGIS Engine Runtime so it can make its
// attempt to create the Query Description object.
hr = pSqlWorkspace->GetQueryDescription(CComBSTR(_T("SELECT * FROM BASEDB.DISTRIBUTIONMAIN")),
&pQueryDescription);
// Attempt to open the Query Class for the Query Layer by passing in the
// (possibly modified) Query Description object.
hr = pSqlWorkspace->OpenQueryClass(CComBSTR(_T("Distr_Mains")),
pQueryDescription,
&pTableForSQL);
// QI to determine if the query class also supports the IFeatureClass interface.
// If so, this indicates it is able to form the basis for a Feature Layer.
pFeatureClassForSQL = pTableForSQL;
if (pFeatureClassForSQL != NULL)
{
// Create the new feature layer object
pFeatureLayer.CreateInstance(CLSID_FeatureLayer);
// Assign the just-created feature class to the layer
hr = pFeatureLayer->putref_FeatureClass(pFeatureClassForSQL);
// ... additional logic to assign layer properties ...
}
Any insights would be appreciated.Thanks for your help.Scott