3

ADO.Net を使用して、テーブルのすべての関係を取得しようとしています。以下のコードがありますが、Data.Relations または DataSet.Tables[0].ChildRelations/ParentRelations を取得できません。

string query = string.Format("SELECT TOP 0 * FROM {0}", tableName);

var ds = new DataSet(tableName);
SqlCommand sqlCmd = new SqlCommand(query, connection);
SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);

sda.FillSchema(ds, SchemaType.Source, tableName);
sda.Fill(ds, tableName);

sda.Dispose();

ありがとう!

4

2 に答える 2

3

から結果を取得してDbCommandも、返される値の射影を形成するために使用されたテーブルの関係に関する情報は返されません (クエリ以外では必要ありません)。

つまり、このGetSchemaメソッドを呼び出して、関係に関する情報を取得できます。

パラメーターを指定せずに呼び出すと、そのコレクションで使用できるすべてのメタデータ コレクションの種類の一覧が表示されます。これらのコレクションの 1 つの場合、SqlConnection「ForeignKeys」です。

次に、次のように電話をかけることができます。

DataTable foreignKeys = connection.GetSchema("ForeignKeys");

これにより、そのデータベースに存在するすべての外部キーのリストが表示されます。

つまり、 への各呼び出しはproviderGetSchemaに固有です。が異なるプロバイダー間で同じデータ コレクションまたは同じ形式を返すという保証はありません。Oracle、ODBC、OLE-DB、MySql などで得られる結果はすべて異なる可能性があり、それらの違いを自分で説明する必要があります。GetSchema

于 2012-09-10T19:09:06.587 に答える
0

よく考えた後、Microsoft.SqlServer.Management.Smo を実行します。それは私に多くの時間を節約するので。他のデータプロバイダーに関しては、その時が来たら、同様のコードを書きます。良い API を書いたら、必ずオープン ソースにして他のユーザーと共有します。

于 2012-09-10T21:29:00.423 に答える