3

ADO に依存する VB6 データベース中心のアプリケーションを C# に移植しています (ADO.NET に依存しています)。このアプリケーションがアクセスするデータベースのスキーマは任意であり、DbConnection.GetSchema情報を取得するために依存しています。

私が知る限り (ここで助けが必要です)、GetSchemaADOX.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

それらはさまざまな順序で出てきますが、どうすればよいかわかりません!

私の質問は基本的に: ADO.NET には GetSchema 以外の 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 に答える