ArcGIS Engine读取gdb数据库中的表文件,并进行增删改操作

前言

        本文针对gdb中表的数据类型如下,本文不适合更改要素属性表的场景。请在ArcGIS中查看数据源的属性信息。本文使用数据属性信息如下:

        Data Type:Standalone Table

        Table Type:File Geodatabase Table

        Has Object-ID Field: Yes

1、读取gdb数据库中的表文件

  pTable这个变量,在本文中不同功能模块都会使用,在本模块定义并进行了赋值,后续模块将直接使用。

using ESRI.ArcGIS.Geodatabase;

private ITable pTable = null;

//workspace是创建的gdb工作空间
private ITable GetInfoTable(IWorkspace workspace)
{
    IEnumDataset pEnumDataset = workspace.get_Datasets(esriDatasetType.esriDTTable);
    IDataset dataset = pEnumDataset.Next();
    while (dataset != null)
    {
        //FileGeoDatabase_Name为gdb数据库中的表名
        if (dataset.Name == "FileGeodatabaseTable_Name")
        {
            return dataset as ITable;
        }
        dataset = pEnumDataset.Next();
    }
            return null;
}

//ws为gdb工作空间,请读者自行查阅创建方法
pTable = GetInfoTable(ws);

2、更新表数据

        下面这段代码用于更新指定行的数据,通过字典储存需要更新的信息,并循环字典中的内容进行指定行的指定数据更新。

dicColumnindex_newValue:

key为columnIndex,即表文件的列序数(从零开始计数)。

value为newValue,即需要进行更新的数据值。

//这里假设更新表的相关数据存在字典里
private Dictionary<int, string> dicColumnindex_newValue;

//实例化字典,否则报错
dicColumnindex_newValue = new Dictionary<int, string>();

//向字典中添加数据
//dicColumnindex_newValue.Add(key,value);

private void updateInfo() 
{
    // 创建查询过滤器
    IQueryFilter queryFilter = new QueryFilter();

    // 设置过滤条件,这里设置的是查询条件是特定ObjectID的数据
    queryFilter.WhereClause = "ObjectID = " + objId; 
    ICursor cursor = pTable.Update(queryFilter, true);
    
    IRow pRow = cursor.NextRow();
    
    for(int i = 0; i < dicColumnindex_newValue.Count; i++)
    {
        string newValue = "";
        //通过键获取值
        dicColumnindex_newValue.TryGetValue(columnIndex, out newValue);
        pRow.set_Value(columnIndex, newValue);
        cursor.UpdateRow(pRow);
        pRow.Store();
        //下面这句会自动将更新数据覆盖gdb中的表数据
        cursor.Flush();
    }   
} 

3、插入一行新数据

IRowBuffer rowBuffer = pTable.CreateRowBuffer();
//true表示使用缓存(官方说法:useBuffering),false则不使用。
ICursor insertCursor = pTable.Insert(true);
         
for (int i = 0; i < dicColumnindex_newValue.Count; i++) 
{
    string value = "";
    //该字典定义详见 2、更新表数据 中有说明
    dicColumnindex_newValue.TryGetValue(columnIndex, out Value);
    rowBuffer.set_Value(columnIndex, value);    
}
insertCursor.InsertRow(rowBuffer);
insertCursor.Flush();

4、删除整行数据

//此处以删除指定objectid值的行为例
IQueryFilter queryFilter = new QueryFilterClass();

//objectidValue 为设置的特定值,即删除objectid为objectidValue的整行
//通过设置whereClause也可以选择多行进行删除
queryFilter.WhereClause = "OBJECTID =" + objectidValue;

pTable.DeleteSearchedRows(queryFilter);

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要批量合并多个GDB数据库,可以使用ArcGIS工具箱的Merge Geodatabase工具。该工具可在一个工作区内合并多个GDB数据库。 首先,在ArcGIS创建新的GDB数据库,选择一个文件夹作为其工作区。然后将要合并的GDB数据库复制到该工作区。 接下来,打开ArcToolbox窗口,在Data Management Tools找到Merge Geodatabase工具。双击该工具打开对话框,在Input Geodatabases一栏选择要合并的多个GDB数据库。 在Output Geodatabase一栏指定新的合并后的GDB数据库的名称和位置。可以选择将原始GDB数据库的元数据复制到新的合并后的GDB数据库。 最后,单击执行按钮,在合并多个GDB数据库的过程,可以查看进度和操作日志。合并完成后,新的GDB数据库将包含原始GDB数据库所有要素类、栅格数据、和关系类。 请注意,在合并多个GDB数据库之前,应备份原始GDB数据库。合并后,新的GDB数据库可能包含重复的数据,需要进行检查和清除。 ### 回答2: 批量合并gdb数据库是一种简单而有效的方法,适用于多个数据库之间具有相似或完全相同结构的情况。在ArcGIS,可以通过使用合并工具来实现该过程。 首先,需要打开ArcGIS软件,选择“工具箱”的“数据管理工具”,然后选择“合并工具”。在合并工具界面,需要选择要合并的gdb数据库文件,这可以通过浏览文件夹来完成。合并工具提供了很多选项,比如可以选择是否覆盖重复的要素,是否保留源数据库的结构和字段等。用户需要根据自己的需求进行设置和调整。 合并工具还提供了进度条功能,可以让用户实时了解合并的进度。一旦合并完成,就可以在输出目录找到新文件。 需要注意的是,合并工具只能用于合并同类型的gdb数据库。如果要合并多种类型的数据库,需要先进行格式转换。此外,在合并过程,需要注意数据库文件的完整性和稳定性,避免出现数据丢失或损坏的情况。 总之,使用ArcGIS合并工具可以快速而轻松地完成gdb数据库的批量合并,并且提供了很多实用的选项和功能,非常方便。 ### 回答3: 在ArcGIS,批量合并GDB数据库是一种将多个GDB数据库的数据集、要素类等结构合并成一个新GDB数据库的方法。以下是合并GDB数据库的步骤: 1. 打开ArcCatalog,选择想要作为最终合并输出的GDB数据库。 2. 在“工具箱”找到“数据管理工具”下的“合并工具”,双击打开。 3. 在“合并工具”弹出框,选择“输入数据集”选项卡,并点击“添加”按钮,将想要合并的GDB数据库的各项数据集、要素类等添加到列。 4. 在“输出数据集”选项卡,选择想要输出的GDB数据库路径、名称和格式,并勾选“覆盖已存在的数据集”(如果需要)。 5. 确认合并参数设置无误后,点击“运行”按钮。合并过程将在后台进行。 6. 合并完成后,可以在输出GDB数据库查看合并结果。 需要注意的是,合并过程可能需要较长时间,特别是对于大型数据集或数量较多的数据集而言。同时,在合并过程,可能会存在数据冲突等问题,需要根据具体情况进行调整和处理。可以适当调整数据集名称、属性,以避免冲突和错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值