我正在将依赖于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以便我不会随机排序(这会让那些使用它的同事感到困惑!)
答案 0 :(得分:2)
您可以使用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);
}