c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
на C# пишу метод, которая по BindingSource обновляет таблицу или запись с конкретным ID в ней
Обновление таблицы идет через TableAdapter. Сейчас работает нижеследующий код. Как его можно оптимизировать, чтобы в else if не прописывать код для каждой таблицы?
Исправлено 2 раз(а). Последнее : AlexSSS, 06.08.18 23:36 |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Если отказаться от TableAdapter...
Создать свой какой то класс доступа. Создав в нем методы FillAll() и FillRecord()
Полагаю совет не очень) Много в проекте пересматривать. Но париться не придется при масштабировании ------------------ |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
уже думал об этом
посмотрел код стандартного адаптера - пока передумал ;) я только начинаю писать на C# и начинать с переписывания штатных средств кажется слишком самоуверенным ;) |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Нормально!) Так ты что то готовое правишь, или просто разбираешься, свое ваяешь? Если второе... Я в самом начале, разбирался с SqlDataReader. Там твоя задача, легко решается. Конечно, писанины поболе, но как то можно там все нагенерить) Не помню. Если с 1...5 таблицами работа, то быстро все описывается. (основные моменты) Все же, когда имя метода, связано с конкретным полем таблицы (а кажется так, у таблеадаптера. filBbySomeField() ), как то перегиб) Как то уяснил, что в самом низу происходит, попробовав всякие промежутки, в конце концов, перешел на EF. Все же много усилий экономит. ------------------ Исправлено 1 раз(а). Последнее : Аспид, 07.08.18 15:05 |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
свое. Это первый относительно большой проект на c#, где я пробую все нормально сделать, а не чтобы "просто работало" ;) Хотя, есть опасения, что скоро на winforms станет тесно и придется переходить на WPF. И там, в какой-то степени, все придется снова начинать почти с нуля посмотрю. Insert, Update, Delete я уже реализовал через SqlCommand. Осталось разобраться, как обновлять таблицы в датасете с сервера пасиб на наводку, потом буду посмотреть. |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Так это ж самое простое) просто select * from table - упрощенно. Конкретную запись получить, тоже просто. Ну и подменить ее в дататабле. Вот и весь твой функционал реализован) ------------------ |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Тут я бы посоветовал сразу на веб смотреть. Тот же asp.net mvc ------------------ |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
как?вот это я пока как-то совсем слабо представляю. если сканировать все записи и менять каждое поле, то это выйдет жутко тормознуто Исправлено 1 раз(а). Последнее : AlexSSS, 07.08.18 16:30 |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Ну не уверен.
------------------ Исправлено 1 раз(а). Последнее : Аспид, 07.08.18 16:25 |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
если это все примерно так, то это будет гораздо проще, чем победить стандартный tableadapter
пасиб, буду копать в этом направлении |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Тогда советую сразу забить на датасеты - это позавчерашний день. EntityFramework, или какой Dapper для "лёгких" применений. WinForms тоже совсем не в почёте нынче. Веб кругом, микросервисы и фронтэнд на JavaScript. P.S. Насколько я помню это старьё, там просто предполагается сами DataTable использовать в качестве источника данных (да, можно через BindingSource - у него для того есть всё что надо), а изменения вносимые в них уже более-менее инфраструктура датасетная умеет запихивать обратно на сервер. Перегонять DataTable в нечто другое, а потом обратно для отправки на сервер - думаю не взлетит даже если и напишешь всю эту гору кода (добавишь ручное отслеживание всех изменений в свой объектный источник данных, либо же "сравнение" намалюешь строк DataTable с объектами в BindingSource). ------------------ WBR, Igor |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Да. Тут трудно не согласиться с Игорем. Разобраться с EntityFramework будет быстрее, чем лепить что то свое. Code First формирует, ясную структуру в проекте, сразу понятную (если ты и автор БД) В результате, все общение с БД, как то... тебя не будет волновать. Можно сосредоточиться на логике. И еще, с чем не все согласны. если сразу разделишь решение, на проекты Работы с данными, БЛ, и дизайн, потом можно взяв 2 первых, легко перенести решение, на веб. Почему? как то кажется и не очень сложно, в простых случаях. Чтение любое. insert, update по 1й записи. Чего в большинстве случаев достаточно. Не знаю, дружат ли DataTable c Linq. Но по любому, EF далеко впереди. Да и изучать проще, меньше. Имеется ввиду, самое основное) (А может это сейчас кажется) ------------------ |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
Игорь, привет, рад тебя снова увидеть! ;) И чего я сразу на этот форум не зашел, когда начал писать на c#?! Съэкономил бы кучу времени и не пришлось бы разбираться с какими-то вещами. которые в будущем все равно уже не будут нужны Dataset - в этом проекте я его буду использовать просто в качесте локального кэша базы. Insert, Update, Delete напрямую в базу у меня уже написаны через SqlCommand. Аспид дал наводку как засунуть данные в датасет из базы, проверил, работает. Основной интерфейс проекта уже сдавать через пару недель, так что пока сделаю уже понятным способом через датасет. Потом засяду за изучение EntityFramework. WinForms- пока для того, чтобы начать бегло писать на C#, пойдет ;) Потом еще поизучаю, на что дальше переходить. Исправлено 1 раз(а). Последнее : AlexSSS, 07.08.18 22:10 |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
Огромное спасибо, ты меня сейчас просто спас! Проверил - работает. Потрачу несколько часов на написание своего класса, который будет обновлять датасет с сервера. Зато получу предсказуемое и прозрачное решение и не надо будет извращаться с этим кривым TableAdapter |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Адаптер не для того предназначен... Точнее далеко не только для того. Он занимается перекачкой данных из DataTable в подключенную СУБД. Генерируя, либо храня в своих свойствах нужные INSERT/UPDATE/DELETE команды.
Linq работает с любой коллекцией или массивом. Другое дело что вынуть 100500 записей а потом локально LINQ запросом обрабатывать - по сути просто обёртка над тупыми for() циклами - весьма неэффективно. А вот НЕ вынимая ничего из БД, построить на основе linq запрос к БД (по сути трансформировать дерево linq а в SQL запрос) и уже его исполнить - для датасетов так не выйдет... ------------------ WBR, Igor |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Мне кажется, все нормально. Посмотри 1й вопрос. Алекс решает задачу, на новом языке, понятным ему способом. И этот способ, устаревший, но не запрещенный.))) Более того, сразу взяться за EF, и в дальнейшем не знать о DataTable,DataSet, BindingSource... то же не очень, наверное. А просто "почитать", не то же самое , что "пощупать"))) Все ИМХО. По себе сужу. А у каждого свой склад мозга) Какое то время, не доверял EF. Первые эксперименты, показали его тормознутость))) Но когда разобрался, все ему простил) AlexSSS Закончится срочность, возьми этот же проект за основу (дизайн то есть) И всю работу с данными, переделай на EF. Разберешься, и сделаешь все по новому, лаконичнее, и с большими возможностями модернизации. ------------------ |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
оформил в виде класса получение данных из базы в датасет. На общем классе заморачиваться не стал, этот заточен под конкретный проект.
insert, update, delete уже реализованы в другом месте. Сейчас вычищаю все упоминания о стандартном tableAdapter из проекта ;) Пока все отлично работает, допиливать класс буду по ходу работы, как минимум, надо будет добавить обновление данных с учетом timestamp и очистку таблицы перез обновлением
Исправлено 1 раз(а). Последнее : AlexSSS, 08.08.18 09:39 |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
Начну изучать EF. Реализовать его на этом и следующем несложном (чтобы можно было безболезненно поэксперементировать) проекте - решу по ходу. Исправлено 1 раз(а). Последнее : AlexSSS, 08.08.18 10:32 |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Глянул код... и охватил ужас)))
Тем более это живой проект. Обычная проблема. Все же совет, прислушаться к Игорю) вот как вся эта суета, выглядит с EF.
Но думаю, сам код, предельно ясен. А теперь получение данных
Думаю за время написания приведенного тобой класса, разберешься и с EF. Он сам генерит контекст, и класс Person. Конечно, можно зайти и подправить (при новой генерации, все исправления пропадут, сохраняй где то, потом разберешься))) ) В общем стоит потратить немного времени, движение вперед, будет ОЧЕНЬ большим. ИМХО) ------------------ |
Re: c# winforms унифицировать обращение к TableAdapter | |
---|---|
AlexSSS Автор Сообщений: 6113 Откуда: Tallinn, Estonia Дата регистрации: 19.09.2005 |
-
Исправлено 2 раз(а). Последнее : AlexSSS, 08.08.18 13:25 |
© 2000-2024 Fox Club  |