基於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 和作者:GIS雲中鶴