2011-01-05 6 views
0

В настоящее время я пытаюсь использовать базу данных SQLite с DataGridView в C#.ADO.NET Использование DataSet

Я видел пример программы, которая выполняет следующие действия:

DataSet combinedDataSet = new DataSet(); 
DataTable ContactsTable = CombinedDataSet.Tables.Add("contacts"); 
DataTable FoodTable = CombinedDataSet.Tables.Add("food"); 

SQLiteDataAdapter ad = new SQLiteDataAdapter(command) 

ad.Fill(FoodTable); 
ad.Fill(ContactsTable); 

В этой таблице данные затем используются в качестве источника для DataGridView.

Мой вопрос заключается в следующем:

Зачем использовать DataSet? Почему бы просто не перейти прямо к DataTable?

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

ответ

1

DataSet - это представление реляционных данных в памяти. В частности, он может содержать несколько таблиц данных с отношениями между ними.


См "DataSets, DataTables, and DataViews (ADO.NET)" за хороший набор обзорных статей. Вы увидите, как DataSet поддерживает коллекцию объектов DataRelation и как каждый DataTable поддерживает собственную коллекцию родительских и дочерних отношений.

+1

Это отношения между данными, которые вы покупаете с помощью набора данных. Если вам не нужны связанные функции datatable, вы можете пропустить использование наборов данных. – Beth

+0

Какие у них отношения, которые потребуют DataSet? – Mark

+0

Отношения как в отношении родителя-ребенка, так и в отношении любых других внешних ключей. Клиентам-> Orders-> OrderDetails-> Продукция. То же, что и в реальной базе данных. –

0

Я согласен с тем, что здесь нет особых причин поместить DataTables в DataSet. DataSet - это просто удобный контейнер для передачи таблиц данных, в том числе потенциально для сеанса.

Если вы считаете, что проще и чище призывать DataTables по необходимости, а не связывать их друг с другом в DataSet, это будет работать нормально.

0

С практической точки зрения может потребоваться использование объектов DataSet, если вы используете объект DataAdapter для выполнения обновлений. Например, если вы хотите использовать метод DataAdapter.Update, вы должны передать ему объект DataSet.

+0

Спасибо за ваш ответ, но я передаю этот метод DataTable и, похоже, работает. (Как указано выше) – Mark

+0

Метод Update принимает DataTable? Интересно. Я не понимал, что это сработало. –

+0

Возможно, я ошибаюсь - но я так думаю .. – Mark

0

Это perfacly нормально иметь только DataTables без DataSets

Помимо того, что сказал @John Сондерс об отношениях, я могу думать о более двух преимуществ

При работе с типизированными наборами данных (полученных от XSL), вы обычно работают на уровне наборов данных, потому что Typed DataTables вложены внутри DataSet.

Набор данных полезен для отладки. В окне inermediate вы можете позвонить combinedDataSet.GetXml(), чтобы просмотреть его или сохранить в файл для лучшего анализа содержимого. Я не уверен, если новая dotnet-4 разрешает Table.GetXml(), но до dotnet-3.5 table.GetXml() не существует.

Смежные вопросы