
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace AEApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var connStr = "Instance=sde:oracle11g:1727/orcl;USER=testcgk;PASSWORD=testcgk";
IWorkspace workspace = null;
string[] properties = connStr.Split(';');
//直连空间数据库
IPropertySet pPropset = new PropertySetClass();
foreach (string item in properties)
{
string[] keyVal = item.Split('=');
if (keyVal.Length == 2)
{
pPropset.SetProperty(keyVal[0].Trim(), keyVal[1].Trim());
}
}
try
{
workspace = new SdeWorkspaceFactoryClass().Open(pPropset, 0);
}
catch (Exception ex)
{
}
Debug.WriteLine(workspace.ConnectionProperties.GetProperty("INSTANCE"));
IFeatureWorkspace targetFeatureWorkspace = null;
targetFeatureWorkspace = workspace as IFeatureWorkspace;
//测试删除
//var desTable = targetFeatureWorkspace.OpenTable("YW_XMXX");
//(desTable as IDataset).Workspace.ExecuteSQL($"delete from YW_XMXX where id='F0F01BAC-7110-4294-8FF2-18DA32F320BF'");
//这句不用开始编辑也能删除。
//workspace.ExecuteSQL($"delete from YW_XMXX where id='7F699720-1BBD-41BC-AD7F-51CA35995FEE'");
//如果是编辑一个字段值呢,要不要开始编辑 ?
IQueryFilter query = new QueryFilterClass();
query.WhereClause = "id='06808D43-85B2-4D44-ABC8-86D0D13D1C9A'";
var desTable = targetFeatureWorkspace.OpenTable("YW_XMXX");
ICursor cursor = desTable.Search(query, false);
IRow pRow = null;
while (true)
{
pRow = cursor.NextRow();
if (pRow == null) break;
//操作更新
var idx_sqr = pRow.Fields.FindField("SQR");
pRow.set_Value(idx_sqr, "TEST");
pRow.Store();
break;//不更新其他行了。
}
Marshal.ReleaseComObject(cursor);
//以上代码更新成功。
//结论:更新字段值的话,不用注册版本。
//pEngineEditor = new EngineEditorClass();
//pEngineEditor.StartEditing(pFtWs as IWorkspace, axMapControl1.Map);
//pEngineEditor.StartOperation();
//IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
//bool apk = (pEngineEditor as IEngineEditLayers).IsEditable(pFeatureLayer);
var workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();
var djq = targetFeatureWorkspace.OpenFeatureClass("DJQ");
var query2 = new QueryFilterClass();
query2.WhereClause = "DJQDM ='321203004'";
IFeatureCursor pCursor = djq.Search(query2,false);
IFeature pFea = null;
while (true)
{
pFea = pCursor.NextFeature();
pFea.Delete(); //因为图层所在数据集没有注册版本,这行报错为: 未更新任何行 [No rows were updated]
pFea.Store();
break;
}
Marshal.ReleaseComObject(pCursor);
if (workspaceEdit.IsBeingEdited())
{
//结束一个编辑会话,保存数据数据库内
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
}
//结论:如果没有注册版本,可以开始编辑,也可以结束编辑,可在具体操作图层时,会报未更新任何行。
}
}
}

[STAThread]
static void Main()
{
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);
IAoInitialize aoInitialize = new AoInitialize();
esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;
licenseStatus = aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}