我正在将依赖于 ADO 的以 VB6 数据库为中心的应用程序移植到 C#(依赖于 ADO.NET)。此应用程序访问的数据库的架构是任意的,我依靠它DbConnection.GetSchema
来检索信息。
据我所知(这里是我需要帮助的地方),GetSchema
应该替换 ADOX.Catalog。所以这就是我所拥有的(对格式感到抱歉!):
List<string> temp = new List<string>();
string[] restrictions = new string[4] { null, null, tableName, null };
using (SqlConnection databaseConnection = new SqlConnection(connString))
{
databaseConnection.Open();
foreach (DataRow row in databaseConnection.GetSchema(
SqlClientMetaDataCollectionNames.Columns, restrictions).Rows)
{
temp.Add(row["COLUMN_NAME"] as string);
}
}
我知道这正确地填充temp
了名为tableName
. 但是,顺序似乎是任意的,而 ADOX.Catalog 的顺序与您在 Sql Management Studio 中找到的顺序完全相同。以下是原版的做法:
Dim cat As New ADOX.Catalog
Dim T As ADOX.Table
Dim C As ADOX.Column
Set cat.ActiveConnection = conn
'retrieve list of fields for this table'
Set T = cat.Tables(tableName)
For Each C In T.Columns
temp.Add C.Name
Next
它们以不同的顺序出现,我不知道该怎么办!
我的问题基本上是:除了 GetSchema 之外,ADO.NET 是否可以替代 ADOX.Catalog?如果不是,我怎么能订购 GetSchema,这样我就不会得到随机订购(这会让我使用它的同事感到困惑!)