【发布时间】:2010-11-05 20:18:04
【问题描述】:
我正在将一个依赖于 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);
}
}
我知道这样一个事实,即使用名为tableName 的表的列名正确地填充了temp。但是,顺序似乎是任意的,而使用 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,这样我就不会得到随机订购(这会让我的同事很困惑!)
【问题讨论】:
标签: c# ado.net ado vb6-migration