Shapefile导入数据库 c#

研究了一天shape图层导入数据库,现将实现代码及注意事项整理如下:

//引用
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Geometry;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.Controls;

//调用方法
public void ShapefileImportDB()
{
    //将要导入数据库的shape图层添加到mapControl
    string filePath = System.AppDomain.CurrentDomain.BaseDirectory + @"data\Intersect";
    m_mapControl.AddShapeFile(filePath, "intersect.shp");
    //设置数据库连接字符串(此处采用的是Oracle数据库,其他数据库大同小异,未加以验证)
IPropertySet pPropertySet = new PropertySet();
    pPropertySet.SetProperty("Data Source", "192.168.34.54\\orcl");
    pPropertySet.SetProperty("User ID", "zsdz");
    pPropertySet.SetProperty("Password", "Zs123456");
    //pPropertySet.SetProperty("version", "SDE.DEFAULT");
    IFeatureLayer m_featureLayer = m_mapControl.get_Layer(0) as IFeatureLayer;
    IFeatureClass m_featureClass = m_featureLayer.FeatureClass;
    IWorkspaceFactory pWorkspaceFactory = new SdeWorkspaceFactory();
    IWorkspace pWorkspace = pWorkspaceFactory.Open(pPropertySet, 1);
    int code = getSpatialReferenceCode(m_featureClass);// 
    string datasetName = m_featureClass.AliasName;
    //删除数据库中原有的相同的要素类(因为我的写程序要定时将新生成的shape图层更新到数据库,所以要先对数据库原有的要输类进行删除)
DeleteFeatureDataset(pWorkspace, "ZSQYFJ_PY");
    //根据名称获取要素集(若数据库中存在该名称的要素集,则获取;若无,新建)
IFeatureDataset pFeatureDataset = getFeatureDataset(pWorkspace, "QYFJ");
    if (pFeatureDataset == null)
    {
        pFeatureDataset = CreateFeatureClass(pWorkspace, code, "QYFJ");
}
//得到数据集后,将要素类导入数据库
    importToDB(m_featureClass, pWorkspace, pFeatureDataset, "ZSQYFJ_PY"); 
}

//获取数据库中的要素集
private IFeatureDataset getFeatureDataset(IWorkspace pWorkspace, string datasetName)
{
    IFeatureDataset pFeatureDataset = null;
    IEnumDataset               pEnumDataset=pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
    pEnumDataset.Reset();
    IDataset pDataset = pEnumDataset.Next();
    while (pDataset != null)
    {
        if (pDataset.Type == esriDatasetType.esriDTFeatureDataset)
        {
            &nb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值