2009-10-15 6 views

答えて

6

IDataReader.GetSchemaTable()の実装はプロバイダーによって異なるため、実装は異なります。あなたはあなた自身のプロバイダを書くことができ、あなたが望む方法でそれを行うことができます。

これはフレームワークのデザインが悪いことです。型なしのDataTableまたはDataSetを返すインターフェイスメソッドを使用しないでください。ちょっと最初の場所でのインタフェースによって、それを制約のポイントを敗北:は、「あなたはDataTableを返すメソッドを持っている必要がありますが、我々はそれを持っているものの行や列を気にしない」プロバイダがSQL GetSchemaTable()ある

場合でも、 [syscolumns]または[sysobjects]には戻りません。結果セットはDB内のオブジェクトを反映する必要がないので、それは追加のDB呼び出しであり、追加の特権を必要とし、とにかく動作しません。

私は確かではありませんが、IDataReader.GetSchemaTable()の実装の大部分は、結果セットで保持されているメタデータのいくつかのプロパティを読み取ることを期待しています。

-1

各データベースのシステムテーブル(例:syscolumns、sysobjectsなど)から取得します。

+0

これはいつもそうですか、それとも使用されているOLE DBプロバイダに依存していますか? –

+2

それは間違っています。結果は動的かもしれません。ユーザはsysobjects(MSSQL 2005+のVIEW DEFINITIONを表示する権限)を持たないかもしれません。 – VladV

+0

あなたの読者が 'SELECT 'test'、1'にあったとしますか?あなたは 'IDataReader'の結果セットで' GetSchemaTable() 'を呼び出すことができ、' [sysobjects] 'をチェックしていないでしょう。 – Keith

2

GetSchemaTable()は、ADO.NETによって返された結果セットのメタデータを読み取ります。

関連する問題