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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章