3

我正在将依赖于 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,这样我就不会得到随机订购(这会让我使用它的同事感到困惑!)

4

1 回答 1

3

您可以使用该DataTable.Select方法对结果进行排序:

databaseConnection.Open();
DataTable columns = databaseConnection.GetSchema(
            SqlClientMetaDataCollectionNames.Columns, restrictions);
foreach (DataRow row in columns.Select("", "COLUMN_NAME"))
{
    temp.Add(row["COLUMN_NAME"] as string);
}
于 2010-11-05T20:57:59.610 回答