时间:2013-10-23 作者:悬浮的青春 分类: gis二次开发
基于AE的个人地理数据库(mdb格式)导入到企业级数据库(sde数据库中,采用Oracle数据库)中(C#).
个人地理数据库有数据集,导入到企业级数据库后没有数据集,只有要素类。
private
void btnPGD2EGD_Click(object sender, EventArgs
e)
{
try
{
string pWorkspaceName =
strName;
string sdeUser =
pSDEwsp.ConnectionProperties.GetProperty("USER").ToString();
IWorkspaceFactory pMDBwspf = new
AccessWorkspaceFactoryClass();
pMDBwsp = pMDBwspf.OpenFromFile(pWorkspaceName,
0);
Cursor =
Cursors.WaitCursor;
if (pSDEwsp !=
null)
{
//progressBar.Visible =
true;
DataVonverter(ref
pMDBwsp, ref pSDEwsp,
sdeUser);//数据导入
progressBar.Visible =
false;
}
Cursor =
Cursors.Default;
}
catch
(Exception
ex)
{
MessageBox.Show(ex.ToString());
}
MessageBox.Show("mdb数据上传SDE库成功!", "数据导入", MessageBoxButtons.OK,
MessageBoxIcon.Information);
this.Close();
}
public void DataVonverter(ref IWorkspace FromWorkspace, ref
IWorkspace ToWorkspace,string
SDEUser)
{
if
(SDEUser == "")
return;
IFeatureWorkspace
pOutFeatureWorkspace;
IFeatureWorkspace
pInFeatureWorkspace;
IFeatureClass
pFeatureClass;
IFeatureClass
pOutFeatureClass;
IWorkspace2
pWorkspace2;
IEnumDataset
pEnumDataset;
IDataset pOutDataset;
IFeatureDataset
pOutFeatureDataset;
IEnumFeatureClass
pEnumFeatureClass;
IFeatureClassContainer pFeatureclassContainer;
pOutFeatureWorkspace =
(IFeatureWorkspace)ToWorkspace;
pInFeatureWorkspace =
(IFeatureWorkspace)FromWorkspace;
pWorkspace2 = (IWorkspace2)ToWorkspace;
pEnumDataset =
(IEnumDataset)FromWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);//获得MDB端的所有数据集
pOutDataset = (IDataset)pEnumDataset.Next();
while
(pOutDataset !=
null)//遍历数据集
{
pOutFeatureDataset =
(IFeatureDataset)pOutDataset;
if (pOutFeatureDataset !=
null)
{
pFeatureclassContainer =
(IFeatureClassContainer)pOutFeatureDataset;
pEnumFeatureClass =
(IEnumFeatureClass)pFeatureclassContainer.Classes;
pFeatureClass =
(IFeatureClass)pEnumFeatureClass.Next();
while (pFeatureClass !=
null)//在每一个数据集中遍历数据层IFeatureClass
{
if
(!pFeatureClass.AliasName.Contains("UnClassfied"))
{
if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, SDEUser + "."
+
pFeatureClass.AliasName))
{
pOutFeatureClass = pOutFeatureWorkspace.OpenFeatureClass(SDEUser + "." +
pFeatureClass.AliasName);
fc2fc(ref pFeatureClass, ref
pOutFeatureClass);
}
else
{
fc2fc(ref pFeatureClass, ref
ToWorkspace);
}
}
pFeatureClass =
(IFeatureClass)pEnumFeatureClass.Next();
}
}
pOutDataset =
(IDataset)pEnumDataset.Next();
}
ITable
pInTable;
pInTable =
pInFeatureWorkspace.OpenTable("AIndexInfo");
//如果SDE数据库中已经有AIndexInfo表,则将新的记录追加进去
if (pWorkspace2.get_NameExists(esriDatasetType.esriDTTable, SDEUser + "." +
"AIndexInfo"))
{
ITable pOutTable =
pOutFeatureWorkspace.OpenTable("AIndexInfo");
FusedIndexTable(ref pInTable, ref
pOutTable);
}
else//如果SDE数据库中没有AIndexInfo表,则重新生成和来源端一样的AIndexInfo表
{
FusedIndexTable(ref pInTable, ref
ToWorkspace);
}
}
转载出处:http://www.cnblogs.com/njlhb/archive/2007/06/17/786242.html
标签: arcgis