使用在线数据源创建离线数据源UDBX表名称长度丢失
因超图组件开发时不支持postgis版本控制,采用离线文件udbx方式进行版本管理,进行使用在线数据源生成udbx文件时,发现创建的表名长度丢失,在线数据源表名称长度18位,但是创建的uxbd文件中仅17位.
编写代码如下
//离线数据源位置 udbx
string dataSourceFile = $@"{System.Environment.CurrentDirectory}\{Guid.NewGuid()}.udbx";
//声明离线数据源
var dci = new DatasourceConnectionInfo
{
Server = dataSourceFile
};
dci.EngineType = EngineTypeWrap.GetEngineTypeByExt(Path.GetExtension(dci.Server));
dci.Alias = CommonUtilities.GetAvailableDatasourceAlias(workspace, Path.GetFileNameWithoutExtension(dci.Server), 0);
var datasource = DataViewToolKit.CreateDatasource(workspace, dci);
if (datasource != null)
{
datasource.PrjCoordSys = new PrjCoordSys();
}
//遍历创建离线数据集
foreach (Dataset datasetonline in datasourceonline.Datasets)
{
Dataset dataset = datasource.Datasets.CreateFromTemplate(datasetonline.TableName, datasetonline.Dataset);
datasource.Datasets.Rename(datasetonline.TableName, datasetonline.Name);
var offlineDataset = (DatasetVector)dataset;
offlineDataset.Append(sourceRecordset);
datasource.Flush(gisLayer.Layer.Dataset.Name);
// 依次关闭所有对象
sourceRecordset.Dispose();
}
导致原因
UDBX采用的sqllite存储,17位表名长度限制于sqllite无关,经与超图技术支持沟通,解释为UDBX文件设计初参考gis国标要求,设计为表名不超过17个英文字符.
解决方案
在表名被截取的情况下,可以将真实的表名存储到数据集Dataset.Description中,用于后面在线数据集与离线数据集的比对