リンクサーバー経由だと主キーの情報が取れないポ

CoCっていうほどのモノでも無いですが、DBからメタ情報(スキーマ情報)を取得して、動的にCRUDSQLを組み立てたり、DTO/DAOソースの自動生成みたいなことはよくやりますが。
こういう処理ネ(・∀・)

private void GetTableSceme(string tableName)
{
    using( IDbConnection con = GetConnection() )
    {
        con.Open();
        
        IDbCommand cmd = con.CreateCommand();
        cmd.CommandText = "select * from " + tableName;

        // スキーマ情報の取得
        DbDataAdapter adapter = GetDataAdaptor( cmd );
        DataTable dt = new DataTable( tableName );
        adapter.FillSchema( dt, SchemaType.Mapped );

        // 各カラムの情報取得
        foreach( DataColumn column in dt.Columns )
        {
            ...
        }

        // PKの情報取得
        foreach( DataColumn column in dt.PrimaryKey )
        {
            ...
        }
    }
}

protected IDbConnection GetConnection()
{
    return( new SqlConnection( connectionStrng ) );
}

protected DbDataAdapter GetDataAdaptor(IDbCommand cmd)
{
    return( new SqlDataAdapter( (SqlCommand)cmd ) );
}

で、今日もこれをやろうとしたところ、SQL Server 2005にリンクサーバーとして登録したOracle 10gからはPrimaryKeyの情報が取れませんですた(´・ω・`) *1
Microsoft OLE DB Provider for Oracleを使った場合でも、Oracle Provider for OLE DB*2を使った場合でもダメ。
Microsoft OLE DB Provider for SQL Serverを使って登録したSQL Server 2000のリンクサーバーからはPrimaryKeyも取れるんだけどな〜。


しょうがないので、PKは明示して指定できるようにも処理を修正(´ω`)

*1:DataColumn[]がLength=0なのデス

*2:Oracle Provider for OLE DBの場合はプロバイダのオプションで「InProcess許可」をチェックしないとエラー7399とかになりますが。