ArcGIS Pro二次开发创建.sde空间数据库连接文件
在ArcGIS Pro空间数据管理系统的开发中,很多时候需要连接到空间数据库,利用.sde的数据库连接文件连接和管理数据是一个很好地选择,在ArcGIS Pro中可以直接通过“创建数据库连接”工具,实现.sde数据库连接文件的创建,总结了两个方法通过ArcGIS Pro二次开发的方式创建.sde数据库连接文件:
方法一、通过C#程序后通过调用ArcGIS Pro SDK的GP接口实现
如下:
#region GP执行
List<object> argument = new List<object>();
argument.Add(out_folder_path);
argument.Add(out_name);
argument.Add(database_platform);
argument.Add(instance);
argument.Add(account_authentication);;
argument.Add(username);
argument.Add(password);
argument.Add(save_user_pass);
argument.Add(database);
argument.Add(schema);
argument.Add(version_type);
argument.Add(version);
argument.Add(data);
var parameters = Geoprocessing.MakeValueArray(argument.ToArray());
var cts = new CancellationTokenSource();
var result = Geoprocessing.ExecuteToolAsync("CreateDatabaseConnection_management", parameters, null, cts.Token,
(event_name, values) =>
{
switch (event_name)
{
case "OnValidate":
IGPMessage[] gpMess = values as IGPMessage[];
for (int n = 0; n < gpMess.Count<IGPMessage>(); n++)
{
IGPMessage gpMe = gpMess[n];
string msg1 = "OnValidate:" + gpMe.Text;
System.Diagnostics.Debug.WriteLine(msg1);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg1);
}
break;
case "OnProgressMessage":
string msg2 = "OnProgressMessage:" + (string)values;
System.Diagnostics.Debug.WriteLine(msg2);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg2);
break;
case "OnMessage":
string msg3 = "OnMessage:" + values.ToString();
System.Diagnostics.Debug.WriteLine(msg3);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg3);
break;
case "OnProgressPos":
string msg4 = "OnProgressPos:" + (Convert.ToInt16(values)).ToString();
System.Diagnostics.Debug.WriteLine(msg4);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg4);
break;
case "OnBeginExecute":
string msg5 = "OnBeginExecute:" + values.ToString();
System.Diagnostics.Debug.WriteLine(msg5);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg5);
break;
case "OnEndExecute":
IGPResult resultGP = values as IGPResult;
for (int k = 0; k < resultGP.Messages.Count(); k++)
{
IGPMessage mess = resultGP.Messages.ElementAt(k);
if (mess.Text.IndexOf("成功") > -1)
{
bSucess = true;
}
string msg6 = "OnEndExecute:" + mess.Text;
System.Diagnostics.Debug.WriteLine(msg6);
LogManagers.LogManager.Log.WriteLog(LogManagers.LogManager.LogFile.SDEConn, msg6);
}
break;
}
});
#endregion
具体的GP参数参考如下地址:
https://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/create-database-connection.htm
方法二、通过ArcGIS Pro SDK中的数据库连接接口,获取.sde文件,另存出来;具体实现方式如下:
DatabaseConnectionProperties databaseConnectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.PostgreSQL);
databaseConnectionProperties.Instance = "localhost";
databaseConnectionProperties.AuthenticationMode = AuthenticationMode.DBMS;
databaseConnectionProperties.User = "sde";
databaseConnectionProperties.Password = "sde";
databaseConnectionProperties.Database = "sde";
databaseConnectionProperties.Version = "sde.DEFAULT";
EnterpriseDatabaseType enterpriseDatabaseType = databaseConnectionProperties.DBMS;
string Branch = databaseConnectionProperties.Branch;
string ProjectInstance = databaseConnectionProperties.ProjectInstance;
string Version = databaseConnectionProperties.Version;
Geodatabase geodatabase = new Geodatabase(databaseConnectionProperties);
string LocalPath = geodatabase.GetPath().LocalPath;
string sourceFileName = LocalPath;
string destFileName = @"C:\data\test.sde";
//C:\Users\ADMINI~1\AppData\Local\Temp\ArcGISProTemp2168\34524089aa9ebfb50017dd596072fdcb.sde
File.Copy(sourceFileName, destFileName, true);
实际上每次在通过空间数据库接口连接空间数据库的时候,都会生成一个临时的.sde文件,我们可以在连接成功之后,将临时路径中的.sde文件直接保存出来。