gpt4 book ai didi

c# - 如何指示 DbConnection.GetSchema 返回其值的顺序?

转载 作者:太空宇宙 更新时间:2023-11-03 11:43:10 26 4
gpt4 key购买 nike

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

最佳答案

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

关于c# - 如何指示 DbConnection.GetSchema 返回其值的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4109694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com