【问题标题】:How can you indicate the order in which DbConnection.GetSchema returns its values?如何指示 DbConnection.GetSchema 返回其值的顺序?
【发布时间】: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


    【解决方案1】:

    您可以使用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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      相关资源
      最近更新 更多