Я хотел бы решить одну проблему, с которой столкнулся, когда создавал приложение, которое может помочь отображать и изменять данные в базе данных Access с помощью программы C # WPF.
Что у меня есть - чтобы прояснить это - этоБаза данных, к которой у меня есть доступ.База данных содержит три таблицы и отношения.Есть также несколько запросов, потому что в прошлом он полностью работал на VBA.
Теперь я получил запрос на создание удобного приложения для этой БД (базы данных).
Что я могу сделать, так это загрузить данные из основной таблицы, позвольте мне сказать таблицу "Детали".Эта таблица содержит некоторые данные о деталях, такие как идентификатор, имя, идентификатор группы и т. Д. Существует также другая таблица с именем Группа.Группа содержит 3 имени группы.Например, это может быть Программное обеспечение, Оборудование, Другое.
Если бы я был пользователем и знал SQL, я бы написал: EDIT: / edited select
SELECT ID, Parts.Name , Parts.Group , GroupName.Group from PARTS
LEFT JOIN Group ON Parts.GroupID = Group.ID
Это также создается в QUERY в файле Access DB.И после щелчка на этом представлении вы получаете вид, который вам нравится, - все еще в VBA в файле Access DB.
Что я сделал в C #, так это загрузил все таблицы, которые содержит БД.
и у меня есть
ds.Tables["Parts"]
ds.Tables["Groups"]
Когда вы назначаете
DataView dv = new DataView;
dv = DataSet.Tables["Parts"].DefalutView;
//PreviouslyCretedDatagridInWPF:
dataGrid.DataSource = dv;
Если вы загружаете приложение, загрузка Grid работает быстро, и я могу загрузить окно за одну секунду -данные в таблице «частей» - это около 10000 строк и 27 столбцов.
Но если я попытаюсь выполнить соединение, используя, например, с простым условием If, например,
ds.Tables["TempParts"]
, это может быть просто простая клонированная таблица с добавленным столбцом в строке одного типа.например, 28.
for(i=0;i<ds.Tables["Parts"].Rows.Count;i++) {
for( j=0;j<ds.tables["groups"].Rows.Count;j++){
//0is ID column//10is groupIDcolumn)
if(ds.Tables["TempParts"].Rows[i][10] == ds.Tables["groups"].Rows[j][0])
{ ds.Tables["TempParts"].Rows[i][28]= ds.Tables["groups"].Rows[j][0];}
}
Так что я могу как-то назначить или выполнить соединение следующим образом.но я чувствую, что это не правильный или лучший способ, как это сделать.Из-за этого я спрашиваю погоду, есть способ сделать это более удобным или даже более быстрым, потому что это действительно трудоемкая операция.
Следующим шагом, конечно же, является отображение строки, по которой щелкнули, в новом окне, внесение некоторых изменений и применение с использованием изменений, поэтому я использовал условие в окне редактирования, но написал его вручную, что означает, что пользователь выбирает «оборудование».он присваивает номер 1 столбцу groupID в таблице деталей. Я чувствую, что это также не правильный способ сделать это или нет?
Я считаю случай, когда в будущем группы таблиц также будут доступны для редактирования, поэтому «группы» и ID не могут быть сохранены в каком-либо статическом массиве или структуре или около того.Ну, я должен работать с загруженными данными в таблицах данных.
Итак, что я хотел бы сделать, это выполнить объединение над моим набором данных, а затем, если я выберу некоторую строку и отредактирую, я также хотел бы проверить, какой идентификатор принадлежит, например, текстовому значению GroupID, которое отображается для пользователя, о котором я упоминал "программное обеспечение "аппаратное обеспечение" и т. д. и присвоить этот идентификатор первичной таблице данных и принять изменения ...
Вопрос в том, что является более быстрым / удобным способом сделать это.
Делать это над (в) БД, делать с самим кодом, использовать какую-нибудь библиотеку, которая может выполнять такие операции быстрее?
Конечно, в коде может быть какая-то ошибка, потому что у меня нет реального кода здесь, и я пытался упростить его настолько, насколько мог.
Спасибо за ваше время.