リンクサーバー経由だと主キーの情報が取れないポ
CoCっていうほどのモノでも無いですが、DBからメタ情報(スキーマ情報)を取得して、動的にCRUDのSQLを組み立てたり、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は明示して指定できるようにも処理を修正(´ω`)