FAQ
ArcObjects でのエンタープライズ ジオデータベースへのアクセス

ナレッジ番号:5283 | 登録日:2023/07/26 | 更新日:2023/12/28

概要

このサンプルは、エンタープライズ ジオデータベース(ArcSDE ジオデータベース)に接続する方法を示しています。ジオデータベースへ接続するために使用する workspacefactory は SdeWorkspaceFactory です。接続プロパティ(connection properties) が、接続するサーバー、インスタンスを指定し、ファイルシステム上の接続ファイル(.sde)に保存します。

ArcSDE を経由してアクセスしたリモート データベースの場合、プロパティには以下のような接続先データベースの接続プロパティが含まれます。

  • SERVER: 接続先の SDE サーバ
  • INSTANCE: 続先のインスタンス
  • DATABASE: 接続先のデータベース。データベースプロパティはオプションでマルチユーザデータベースを管理する ArcSDE インスタンス(例:SQL Server)の場合に必要です。
  • USER: 接続するユーザ
  • PASSWORD: 接続するユーザのパスワード
  • AUTHENTICATION_MODE: 接続の信任された認証モード。有効なモードは、システム認証(OSA) とデータベース管理システム(DBMS)です。
  • VERSION: 接続するトランザクションのバージョン。トランザクションバージョン名の文字列で指定します。
  • HISTORICAL_NAME: 接続するヒストリカルバージョン。ヒストリカルマーカー名を表す文字列で指定します。
  • HISTORICAL_TIMESTAMP: ヒストリカルバージョン接続を確立するためのヒストリの時期。タイムスタンプを表す日付を含むデータオブジェクトで指定します。日付の形式は DBMS 固有である(SQLServer の例:"1/1/2006 12:00:01 AM")。ワークスペースへの接続はひとつのバージョンのみ表示することができるので、VERSION、HISTORICAL_NAME、HISTORICAL_TIMESTAMP の3つのバージョンのいずれかを指定します。

コード

トランザクション バージョンへの接続例

          
// For example, server = "Kona".
// Database = "SDE" or "" if Oracle.
// Instance = "5151".
// User = "vtest".
// Password = "go".
// Version = "SDE.DEFAULT".

IWorkspace pws = ConnectToTransactionalVersion(server, Instance, User, Password, Database, Version);

       public static IWorkspace ConnectToTransactionalVersion(String server, String instance, String user, String password, String  database, String version)
        {
            IPropertySet propertySet = new PropertySetClass();
            propertySet.SetProperty("SERVER", server);
            propertySet.SetProperty("INSTANCE", instance);
            propertySet.SetProperty("DATABASE", database);
            propertySet.SetProperty("USER", user);
            propertySet.SetProperty("PASSWORD", password);
            propertySet.SetProperty("VERSION", version);

            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
            IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
    
            return workspaceFactory.Open(propertySet, 0);
        }
' For example, server = "Kona".
' Database = "SDE" or "" if Oracle.
' Instance = "5151".
' User = "vtest".
' Password = "go".
' Version = "SDE.DEFAULT".


Public Shared Function ConnectToTransactionalVersion(ByVal server As String, ByVal instance As String, ByVal user As String, ByVal password As String, ByVal database As String, ByVal  Version As String) As IWorkspace
    Dim propertySet As IPropertySet = New PropertySetClass()
    propertySet.SetProperty("SERVER", server)
    propertySet.SetProperty("INSTANCE", instance)
    propertySet.SetProperty("DATABASE", database)
    propertySet.SetProperty("USER", user)
    propertySet.SetProperty("PASSWORD", password)
    propertySet.SetProperty("VERSION", Version)
                     
    Dim factoryType As Type = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory")
    Dim workspaceFactory As IWorkspaceFactory = CType(Activator.CreateInstance(factoryType), IWorkspaceFactory)
    Return workspaceFactory.Open(PropertySet, 0)
End Function

ヒストリカル マーカー (履歴マーカー) 名への接続例

// For example, server = "Kona".
// database = "sde" or "" if Oracle.
// instance = "5151".
// user = "vtest".
// password = "go".
// historicalName = "Year End 2006".
public static IWorkspace ConnectoToHistoricalVersion(String server, String instance,String user, String password, String database, String historicalName)
{
    IPropertySet propertySet = new PropertySetClass();
    propertySet.SetProperty("SERVER", server);
    propertySet.SetProperty("INSTANCE", instance);
    propertySet.SetProperty("DATABASE", database);
    propertySet.SetProperty("USER", user);
    propertySet.SetProperty("PASSWORD", password);
    propertySet.SetProperty("HISTORICAL_NAME", historicalName);

    Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
    IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance (factoryType);
    return workspaceFactory.Open(propertySet, 0);
}
' For example, server = "Kona".
' database = "sde" or "" if Oracle.
' instance = "5151".
' user = "vtest".
' password = "go".
' historicalName = "Year End 2006".
Public Shared Function ConnectoToHistoricalVersion(ByVal server As String, ByVal instance As String, ByVal user As String, ByVal password As String, ByVal database As String, ByVal  historicalName As String) As IWorkspace
    Dim propertySet As IPropertySet = New PropertySetClass()
    propertySet.SetProperty("SERVER", server)
    propertySet.SetProperty("INSTANCE", instance)
    propertySet.SetProperty("DATABASE", database)
    propertySet.SetProperty("USER", user)
    propertySet.SetProperty("PASSWORD", password)
    propertySet.SetProperty("HISTORICAL_NAME", historicalName)
                   
    Dim factoryType As Type = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory")
    Dim workspaceFactory As IWorkspaceFactory = CType(Activator.CreateInstance(factoryType), IWorkspaceFactory)
    Return workspaceFactory.Open(propertySet, 0)
End Function
 

ヒストリカル タイムスタンプへの接続

// For example, server = "Kona".
// database = "sde".
// instance = "5151".
// user = "vtest".
// password = "go".
// timestamp = "1/1/2006 12:00:01 AM".
public static IWorkspace ConnectToHistoricalTimestamp(String server, String instance,String user, String password, String database, String timestamp)
{
    IPropertySet propertySet = new PropertySetClass();
    propertySet.SetProperty("SERVER", server);
    propertySet.SetProperty("INSTANCE", instance);
    propertySet.SetProperty("DATABASE", database);
    propertySet.SetProperty("USER", user);
    propertySet.SetProperty("PASSWORD", password);

    // Convert a string representing a date to a date object when using it 
    // throughout the archiving API.
    DateTime dateTime = Convert.ToDateTime(timestamp);
    propertySet.SetProperty("HISTORICAL_TIMESTAMP", dateTime);

    Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
    IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
    return workspaceFactory.Open(propertySet, 0);
}
' For example, server = "Kona".
' database = "sde".
' instance = "5151".
' user = "vtest".
' password = "go".
' timestamp = "1/1/2006 12:00:01 AM".
Public Shared Function ConnectToHistoricalTimestamp(ByVal server As String, ByVal instance As String, ByVal user As String, ByVal password As String, ByVal database As String, ByVal  timestamp As String) As IWorkspace
    Dim propertySet As IPropertySet = New PropertySetClass()

    propertySet.SetProperty("SERVER", server)
    propertySet.SetProperty("INSTANCE", instance)
    propertySet.SetProperty("DATABASE", database)
    propertySet.SetProperty("USER", user)
    propertySet.SetProperty("PASSWORD", password)
                    
    ' Convert a string representing a date to a date object when using it
    ' throughout the archiving API.
    Dim dateTime As DateTime = Convert.ToDateTime(timestamp)
    propertySet.SetProperty("HISTORICAL_TIMESTAMP", dateTime)
                        
    Dim factoryType As Type = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory")
    Dim workspaceFactory As IWorkspaceFactory = CType(Activator.CreateInstance(factoryType), IWorkspaceFactory)
    Return workspaceFactory.Open(propertySet, 0)
End Function
 

接続ファイルを使った接続

// 例:接続ファイル = @"C:\myData\Connection to Kona.sde".
public static IWorkspace ArcSdeWorkspaceFromFile(String connectionFile)
{
    Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
    IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
    return workspaceFactory.OpenFromFile(connectionFile, 0);
}
' 例:接続ファイル = "C:\myData\Connection to Kona.sde".
Public Shared Function ArcSdeWorkspaceFromFile(ByVal connectionFile As String) As IWorkspace
    Dim factoryType As Type = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory")
    Dim workspaceFactory As IWorkspaceFactory = CType(Activator.CreateInstance(factoryType),IWorkspaceFactory)
    Return workspaceFactory.OpenFromFile(connectionFile, 0)
End Function

OpenFromString メソッドによる接続

OpenFromString メソッドによる接続は便利なので良く使われます。これは、特定のアプリケーションが、既知の接続プロパティでArcSDE ジオデ ータベースにアクセスする例です。この場合、 名前と値のペアの文字列を作成する方が、同じパラメータで property set を作成するよりも簡単で す。

// 例:connectionString = "SERVER=Kona;DATABASE=sde;INSTANCE=5151;USER=Editor;PASSWORD=Editor;VERSION=sde.DEFAULT".

public static IWorkspace ArcSdeWorkspaceFromString(String connectionString)
{
    Type factoryType = Type.GetTypeFromProgID( "esriDataSourcesGDB.SdeWorkspaceFactory");
    IWorkspaceFactory2 workspaceFactory2 = (IWorkspaceFactory2)Activator.CreateInstance(factoryType);
    return workspaceFactory2.OpenFromString(connectionString, 0);
}
' 例:connectionString = "SERVER=Kona;DATABASE=sde;INSTANCE=5151;USER=Editor;PASSWORD=Editor;VERSION=sde.DEFAULT".

Public Shared Function ArcSdeWorkspaceFromString(ByVal connectionString As String) As IWorkspace
    Dim factoryType As Type = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory")
    Dim workspaceFactory2 As IWorkspaceFactory2 = CType(Activator.CreateInstance(factoryType), IWorkspaceFactory2)
    Return workspaceFactory2.OpenFromString(connectionString, 0)
End Function

メタデータ

種類

製品