Сохранение порядка строк MS Access при использовании DataAdapter.Fill в C # - PullRequest
1 голос
/ 20 июня 2011

Вот хитрый ... Я заметил в запросе моего кода, что когда я использовал метод .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 для сохранения порядка?

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Метод Fill() для DataAdapter эквивалентен ExecuteReader(CommandBehavior.Default), поэтому вы ничего не получите, когда речь заходит о сохранении порядка одним или другим методом.

Перечисление CommandBehavior, по-видимому, не дает никакой возможности явно указать, что таблица должна читаться в естественном порядке.

Меня смущает, что DataAdapter.Fill должен изменить порядок естественного порядка данных, хранящихся в базе данных.

РЕДАКТИРОВАТЬ : Подробнее о Естественный порядок

Есть ли какие-либо индексы, определенные в вашей таблице? MS Access покажет данные в таблице, упорядоченные по любым заданным индексам, и, следовательно, не сохранит естественный порядок при визуализации данных (порядок вставки).

С другой стороны, .Fill () будет сохранять естественный порядок независимо от того, какие индексы определены в исходной таблице, поэтому вы можете воспринимать как не чтение в естественном порядке может быть из-за индекса в исходной таблице и не проблема в методе Fill().

Я сделал несколько быстрых тестов, и во всех них DataAdapter - это , возвращая строки, сохраняющие естественный порядок .

0 голосов
/ 21 июня 2011

В реляционной базе данных не существует понятия "естественный порядок".

Существует тот факт, что Jet / ACE хранит таблицы с первичным ключом, кластеризованным на ПК, но это не то же самое, что кажется, что вы определяете «естественный порядок», поскольку ПК может привести к тому, что записи не будут вставлены в порядке ПК чтобы появиться в другом месте.

Таблица без PK просто не принадлежит ни к одной базе данных, поскольку к ней нельзя надежно обращаться и манипулировать через SQL. Конечно, это можно сделать, но это ошибка.

Я думаю, вам нужно переосмыслить то, что вы пытаетесь сделать. Вы, кажется, зависите от причудливых вещей, которые просто иногда работают для вашего заказа презентации. Если этот порядок важен, вы должны структурировать свои данные так, чтобы их можно было упорядочить таким образом.

...