ArcGIS Pro二次开发创建.sde空间数据库连接文件

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文件直接保存出来。

发布了59 篇原创文章 · 获赞 10 · 访问量 39万+

猜你喜欢

转载自blog.csdn.net/jixg1800/article/details/104544866