Концептуальный вопрос. Как верно начать? Клиент под Access на С#.

Чугунок
Дата: 09.11.2004 09:46:43
У меня несколько вопросов к гуру , чтобы правильно начать и спроектировать приложение, иначе потом столько будем много проблем.

Итак, есть файл mdb с 19 таблицами. Между таблицами в базе access определено много связей. Структура базы опеределена и меняться не будет. В приложении в частности будут производиться стандартные действия по добавлению , изменению , удалению записей из таблиц , поиску записей , выполнение запросов на выборку и в связи с этим вот такие вот вопросы.

1. Как поступить с DataSet . Сколько их надо сделать. У меня пока один ДатаСет и вот скажем я в него выкачиваю все таблицы базы.

В итоге получаю ДатаСет , с таблицами которого можно работать в любой форме.

Вот теперь думаю о следующем.

Поскольку в базе определены связи м/у таблицами то наверное придется добавлять связи и в ДатаСете, если не ошибаюсь это Constraint... Так вот как определить в своем ДатаСете эти связи?


Сл подводный камень.

Как поступить с сохранением данных в базу?

Юзер будет менять данные в куче таблиц ДатаСета и может сделать кнопку которая будет обновлять сразу все внесенные изменения по всем таблицам в базу? Или поступить наоборот. Каждый раз когда юзер будет вносить изменения, открывать заново коннект и вносить изменения в базу?

Теперь касательно изменения записей. Будет куча форм в котором будут производиться однотипные действия только над данными разных таблиц (удаление, апдейт , добавление записей).
Может соорудить класс который будет как бы универсальным для выполнения этих действий? А потом его и применять в формах . Но ведь кол-во полей в таблицах разное и типы полей разные. Тут у меня опыта маловато.

Есть еще вопрос важный.

Как получить имена всех таблиц и имена всех полей в mdb файле? Зная это я думаю написал бы класс для работы с записями таблиц.


Был бы очень рад за любую помощь и советы по данному вопросу. Ведь главное правильно начать.
hDrummer
Дата: 09.11.2004 10:52:58
hDrummer
Дата: 09.11.2004 10:56:52
автор
Как получить имена всех таблиц и имена всех полей в mdb файле? Зная это я думаю написал бы класс для работы с записями таблиц.


Посмотрите в сторону DataAdapter.FillSchema.
кузя
Дата: 09.11.2004 10:59:45
Так вот как определить в своем ДатаСете эти связи?
добавляй relation'ы в DataSet - DataSet.Relations.Add(..);
Как получить имена всех таблиц и имена всех полей в mdb файле?
OleDbConnection.GetOleDbSchemaTable(..);
Чунунок
Дата: 09.11.2004 11:03:36
//Посмотрите в сторону DataAdapter.FillSchema.

Уважаемый hDrummer, а нельзя чуть подробней об этом . DaAdapter - это мост между ДатаСетом и самой базой. Как его использовать для получения имен всех таблиц базы и имен полей в таблицах?
Mr. GES
Дата: 09.11.2004 11:04:14
пример моего класса - редактора таблиц
в качестве свойств прнимает dataset, набор комманд и Dataadapter для
осуществления обновлений в таблице
также релизован поиск по любому строковому полю датасета ..
hDrummer
Дата: 09.11.2004 11:08:05
Чунунок
//Посмотрите в сторону DataAdapter.FillSchema.

Уважаемый hDrummer, а нельзя чуть подробней об этом . DaAdapter - это мост между ДатаСетом и самой базой. Как его использовать для получения имен всех таблиц базы и имен полей в таблицах?


кузя более точен - OleDbConnection.GetOleDbSchemaTable(..)
подробнее использование см. в SDK или MSDN.
Чугунок
Дата: 09.11.2004 11:13:26
2 Mr. GES

Спасибо , качнул и смотрю. В аське то бываешь?

2 hDrummer

Ага.

Спасибо All, зарываюсь в работу.

Сейчас определю связи между таблицами. Я уже понял , что это должен быть всего лишь один ДатаСет.
Чугунок
Дата: 09.11.2004 11:33:24
Блин, нуна хорошая книжка по ADO.NET

Вот есть в доке на NET такой пример


C# Copy Code

public DataTable GetTables(OleDbConnection conn)
{
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] {null, null, null, "TABLE"});
conn.Close();
return schemaTable;
}

Как отсюда вытащить имена таблиц абсолютно не рублю, а про имена столбцов тоже бы надо.
кузя
Дата: 09.11.2004 11:40:11
MSDN
Each field in the OleDbSchemaGuid class maps to an OLE DB schema rowset. For more information, see "Appendix B: Schema Rowsets," in the OLE DB Programmer’s Reference.