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

从 a 获取结果DbCommand不会返回有关用于形成返回值的投影的表的关系的任何信息(除了查询之外,它们实际上并不需要)。

也就是说,您可以调用该GetSchema方法来帮助获取有关关系的信息。

当不带参数调用时,它将为您提供通过该集合可用的所有元数据集合类型的列表。在SqlConnection其中一个集合的情况下是“ForeignKeys”。

然后,您可以像这样拨打电话:

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

然后它将为您提供该数据库中存在的所有外键的列表。

也就是说,每次调用GetSchema都是特定于提供者的;不能保证GetSchema会在不同的提供者之间返回相同的数据集合或相同的格式。您获得的 Oracle、ODBC、OLE-DB、MySql 等结果可能都不同,您必须自己考虑这些差异。

于 2012-09-10T19:09:06.587 回答
0

经过深思熟虑,我打算做 Microsoft.SqlServer.Management.Smo。因为它会为我节省很多时间。至于其他数据提供者,到时候我会写类似的代码。如果我最终编写了一个好的 API,我一定会将它开源并与他人分享。

于 2012-09-10T21:29:00.423 回答