問題1:
最近寫服務需要用ArcEngine連接Oracle數據庫,以前連接數據庫都會彈出一個窗體。然后填好之后就可以連接了,這樣很麻煩。
代碼如下:
private bool ConnectToSde() { IWorkspace workspace; ESRI.ArcGIS.esriSystem.IPropertySet pPropset = new ESRI.ArcGIS.esriSystem.PropertySet(); IWorkspaceFactory pWorkspaceFact = new SdeWorkspaceFactory(); pPropset.SetProperty("server", "localhost"); pPropset.SetProperty("database", "database"); pPropset.SetProperty("user", "user"); pPropset.SetProperty("password", "password"); pPropset.SetProperty("version", "SDE.DEFAULT"); workspace = pWorkspaceFact.Open(pPropset, 0); return true; }
運行到 workspace = pWorkspaceFact.Open(pPropset, 0);的時候就會彈出一個ArcCatalog連接數據庫的窗體,如下圖所示:
原因:
原因是在填寫屬性的時候沒有設置實例(INSTANCE)。
解決辦法:
正確代碼如下:
private bool ConnectToSde() { IWorkspace workspace; ESRI.ArcGIS.esriSystem.IPropertySet pPropset = new ESRI.ArcGIS.esriSystem.PropertySet(); IWorkspaceFactory pWorkspaceFact = new SdeWorkspaceFactory(); pPropset.SetProperty("server", "localhost"); pPropset.SetProperty("INSTANCE", "sde:oracle11g:localhost/database");//如果沒有設置INSTANCE屬性,會有連接窗體彈出 pPropset.SetProperty("database", "database"); pPropset.SetProperty("user", "user"); pPropset.SetProperty("password", "password"); pPropset.SetProperty("version", "SDE.DEFAULT"); workspace = pWorkspaceFact.Open(pPropset, 0); return true; }
問題2:
在連接Oracle數據庫的時候,如果INSTANCE屬性填寫錯誤就會出現如下問題 SDE not running on server。
解決辦法:
見問題1解決辦法貼出來的代碼。
注意:SQL Server INSTANCE為:
pPropset.SetProperty("INSTANCE", "sde:sqlserver:localhost")