1

これはトリッキーなものです...コードのクエリで、以下に示すように .NET DataAdapter.Fill メソッドを使用して Access データベースをクエリすると、レコードの順序がレコードの「自然な」順序ではないことに気付きました。 (最初にテーブルに挿入されたとき)。

OleDbDataAdapter oleDbAdapter = new OleDbDataAdapter("SELECT * FROM SomeTable ", oleDbConnection);
oleDbAdapter.Fill(sourceData, "SomeTable" );
foreach(DataRow theRow in sourceData.Tables["SomeTable"].Rows)
{ ... }

あるテーブルには主キーがあったので、主キーで注文できました。主キーを持たない新しいテーブルがあり、テーブルにクエリを実行して、レコードを自然なテーブルの順序で並べ替えたいと考えています。順序を保持するために OleDbDataReader を使用する必要がありますか、または順序を保持するために OleDbDataAdapter.Fill メソッドを作成する方法はありますか?

4

2 に答える 2

1

aのFill()方法はDataAdapterと同等であるExecuteReader(CommandBehavior.Default)ため、いずれかの方法を使用して順序を維持する場合、何も得られません。

列挙はCommandBehavior、明らかに、テーブルを自然な順序で読み取る必要があることを明示的に指定するオプションを提供しません。

データベースに格納されているデータの自然な順序DataAdapter.Fillを並べ替える必要がありますが、混乱を招きます。

編集自然な秩序の詳細

テーブルにインデックスが定義されていますか?MS Accessは、定義されたインデックス順に並べられたテーブル内のデータを表示するため、データを視覚化するときに自然な順序を保持しません(順序を挿入)。

一方、.Fill()、ソーステーブルで定義されているインデックスに関係なく、自然な順序を保持します。したがって、自然な順序で読み取られないと思われるのは、ソーステーブルのインデックスが原因であり、Fill()方法。

私はいくつかの簡単なテストを行いましたが、それらすべてで自然な順序を維持した行DataAdapter 返されています。

于 2011-06-20T16:29:19.847 に答える
0

リレーショナル データベースには「自然な順序」などというものはありません。

Jet/ACE は主キーが PK にクラスター化されたテーブルを格納するという事実がありますが、PK によって PK 順序で挿入されていないレコードが表示される可能性があるため、「自然な順序」を定義しているように見える方法とは異なります。他の場所。

PK のないテーブルは、SQL 経由で確実にアクセスおよび操作できないため、どのデータベースにも属しません。確かにそれはできますが、それは間違いです。

自分が何をしようとしているのかを再考する必要があると思います。あなたは、プレゼンテーションの順序のために、たまたま機能する風変わりなものに依存しているようです。その順序が重要な場合は、その順序で並べられるようにデータを構造化する必要があります。

于 2011-06-21T00:15:42.610 に答える